C# 按名称访问列表
我想有一些名单,我可以访问的名称,也可以通过 我有一堆我想创建的子目录,如下所示:C# 按名称访问列表,c#,C#,我想有一些名单,我可以访问的名称,也可以通过 我有一堆我想创建的子目录,如下所示: List<string> names = new List<string>(); foreach (var name in names) { Directory.CreateDirectory(name); } 我想到了ValueTuples:您可以在一个元组中命名字段,但我认为您不能以任何方式通过一个元组进行命名 还是字典是最好的方法 Dictionary<
List<string> names = new List<string>();
foreach (var name in names)
{
Directory.CreateDirectory(name);
}
我想到了ValueTuples:您可以在一个元组中命名字段,但我认为您不能以任何方式通过一个元组进行命名
还是字典是最好的方法
Dictionary<string, string> names = new Dictionary<string, string>();
foreach (var name in names)
{
Directory.CreateDirectory(name.Value);
}
if (names.TryGetValue("subdir1", out string value))
{
Directory.CreateDirectory(Path.Combine(value, "Something"));
}
有没有一种方法可以在一个类中遍历这些字段?还可以通过名称subdir1和subdir2访问它们吗
更新2:
好的,我会再给它一次机会来澄清我喜欢做什么:我必须创建大约20个子文件夹。我只想在程序中定义这些子文件夹的名称一次。所以这是一个很好的方法:
List<string> namesOfSubFolders = new List<string>
{
"Datasets",
"Docs",
"Manual",
"Visu1",
"Visu2"
};
string projectPath = @"C:\Project";
string workingDir = Directory.GetCurrentDirectory();
foreach (var subFolder in namesOfSubFolders)
{
Directory.CreateDirectory(Path.Combine(projectPath, subFolder));
}
在第一行中,我重复了子文件夹的名称,在第二行中,我不知道复制的是哪个子文件夹。还有其他方法吗?如果您坚持使用
names.subdir1
语法,您可以尝试使用(实现IDictionary
接口):
是的,字典是最好的方法什么是?它可以是任何其他值吗?您的
字典中的键是什么?值
?字典是可以的,但是每次我都必须测试一个键是否存在。我希望有一个具有一组字段的对象(这样我就可以使用Intellisense),并且它还可以通过字段进行初始化。有什么意义吗?旁注:您可以使用GetType().GetProperties()
迭代项字段。我没有完全理解这个问题,所以这可能是过火的话题。
public class SubDirNames
{
public SubDirNames()
{
}
public const string subdir1 = "Something";
public const string subdir2 = "Something Else";
}
SubDirNames names = new SubDirNames();
string temp = names.subdir1;
List<string> namesOfSubFolders = new List<string>
{
"Datasets",
"Docs",
"Manual",
"Visu1",
"Visu2"
};
string projectPath = @"C:\Project";
string workingDir = Directory.GetCurrentDirectory();
foreach (var subFolder in namesOfSubFolders)
{
Directory.CreateDirectory(Path.Combine(projectPath, subFolder));
}
File.Copy(Path.Combine(workingDir, "file.txt"), Path.Combine(projectPath, "Docs"));
File.Copy(Path.Combine(workingDir, "file.txt"), Path.Combine(projectPath, namesOfSubFolders[1]));
using System.Dynamic;
...
dynamic names = new ExpandoObject();
names.subdir1 = @"C:\MyDir\MySubDir1";
names.subdir2 = @"C:\MyDir\MySubDir2";
Directory.CreateDirectory(Path.Combine(names.subdir1, "Something"));
// Do we have "subdir3" key?
if ((names as IDictionary<string, object>).ContainsKey("subdir3")) {
...
}
Dictionary<string, string> names = new Dictionary<string, string>() {
{"subdir1", @"C:\MyDir\MySubDir1"},
{"subdir2", @"C:\MyDir\MySubDir2"},
};
Directory.CreateDirectory(Path.Combine(names["subdir1"], "Something"));