Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.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#_Linq - Fatal编程技术网

C# 如何从数组和列表中创建一个带键的字典?

C# 如何从数组和列表中创建一个带键的字典?,c#,linq,C#,Linq,我有以下两个系列: List<string> files = Directory.GetFiles(FilePath).ToList().Select(file => new FileInfo(file).Name).ToList(); string[] dirs = Directory.GetDirectories(FilePath); 列出文件= Directory.GetFiles(FilePath).ToList(

我有以下两个系列:

      List<string> files =
            Directory.GetFiles(FilePath).ToList().Select(file => new FileInfo(file).Name).ToList();

        string[] dirs = Directory.GetDirectories(FilePath);
列出文件=
Directory.GetFiles(FilePath).ToList().Select(file=>newfileinfo(file.Name).ToList();
字符串[]dirs=Directory.GetDirectories(FilePath);
但是,我想将这两个都添加到一个空字典中,因此我有一个包含路径和文件的大型字典。我不确定的是,如何/在哪里指定键

对于文件,我希望文件名作为键,对于目录,我希望最后一个目录(例如a/b/c中的c)作为键。我知道如何使用FileInfo/DirectoryInfo类获取此信息,但不确定如何在从上面创建字典时包含此信息

我使用的是.NETV3.5,LINQ很好


如果您已经掌握了所需的信息,并且知道如何正确配对,请向表示感谢。您只需使用此语句将其添加到字典中

Dictionary<string, string> myDict = new Dictionary<string, string>();
myDict.Add(file, directory);
Dictionary myDict=newdictionary();
添加(文件、目录);
除非我不理解你?你是在问如何添加它们吗?或者如何将文件与目录正确配对?

对于文件,您可以这样做

var  filesDictonary = Directory.GetFiles(FilePath)
                                      .Select(file => new FileInfo(file))
                                      .ToDictionary(f => f.Name, f => f);
对于目录

var directoriesDictonary = Directory.GetDirectories(FilePath)
                                     .Select(d  => new DirectoryInfo(d))
                                     .ToDictionary(d => d.Name, d => d);

到目前为止,我最喜欢巴拉R的LINQ答案(他得到了我的支持),但值得一提的是,在一般情况下,当您想要将
列表
字符串[]
组合到
字典
中时,您始终可以使用基本的
for
循环:

var MyDictionary = new Dictionary<string, string>();

for (int i = 0; i < Math.Min(MyList.Count, MyArray.Length); i++)
{
    MyDictionary.Add(MyList[i], MyArray[i]);
}
var MyDictionary=newdictionary();
for(int i=0;i

这可能有点无聊,但它适用于任何一对
IEnumerable
集合。

我认为这是可行的。最后一位(参数后的f)阻止代码编译。这应该可以满足我的需要,因为我可以从字典中获取全名(或名称)。fileinfo和directoryinfo都派生自相同的基类型,因此成员相同。我唯一要更改的是获取一个字典,其中文件名/目录名作为键,整个路径作为值?我怎样才能用上面的方法做到这一点?@dotnetdev您是否正在尝试使用一个字典,其中filename和directory名称作为键,FileSystemInfo(基类)实例作为值?如果是这样,在select中,您可以像这样强制转换它们
file=>(FileSystemInfo)new FileInfo(file)
,并且您可以
Union()
这两个字典。您已经告诉我们您希望键是什么,但是值呢?