Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按名称访问列表_C# - Fatal编程技术网

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"));