Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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# Linq匹配要列出的数组?_C#_Linq - Fatal编程技术网

C# Linq匹配要列出的数组?

C# Linq匹配要列出的数组?,c#,linq,C#,Linq,我有一个列表和一个FileInfo[]。我需要知道FileInfo[]的全部内容是否在列表中。做这件事最容易出错的方法是什么 我是这样做的,根据这里的回答,它返回false,但我希望它返回true: // I want to know if all of these files are in the directory List<string> allFilesWanted = new List<string>(); all

我有一个
列表
和一个
FileInfo[]
。我需要知道
FileInfo[]
的全部内容是否在
列表中。做这件事最容易出错的方法是什么

我是这样做的,根据这里的回答,它返回false,但我希望它返回true:

        // I want to know if all of these files are in the directory
        List<string> allFilesWanted = new List<string>();
        allFilesWanted.Add( "a1.txt" );
        allFilesWanted.Add( "a2.txt" );

        // Simulate a list of files obtained from the directory
        FileInfo[] someFiles = new FileInfo[3];
        someFiles[0] = new FileInfo("a1.txt");
        someFiles[1] = new FileInfo( "a2.txt" );
        someFiles[2] = new FileInfo( "notinlist.txt" );

        // This returns "false" when I would expect it to return "true"
        bool all = someFiles.All( fi => allFilesWanted.Contains<string>( fi.Name ) );
//我想知道这些文件是否都在目录中
List ALLFILESTENDING=新列表();
添加(“a1.txt”);
添加(“a2.txt”);
//模拟从目录中获取的文件列表
FileInfo[]someFiles=newfileinfo[3];
someFiles[0]=新文件信息(“a1.txt”);
someFiles[1]=新文件信息(“a2.txt”);
someFiles[2]=新文件信息(“notinlist.txt”);
//当我期望它返回“true”时,它返回“false”
bool all=someFiles.all(fi=>allfileswired.Contains(fi.Name));

谢谢。

关于您的最新问题:

myFileInfoArray.All(fi => myList.Contains(fi));
var filenames=HashSet<string>(list);
fileInfoArray.All(fi=>filenames.Contains(fi.Name));
Except
在内部使用哈希集,因此这是O(n)

列出文件名=。。。
FileInfo[]fileInfos=。。。
var missing=fileInfos.Except(文件名);
var anyMissing=fileInfos.Except(filename).Any()

除了
,您不必丢失
;你可以做
!fileInfoArray.Select(f=>f.FullName).Except(list).Any()
@Ani谢谢你的提示。但是没有必要删除您的答案,特别是因为我的答案缺少一个使用
FileInfo
String
的纯linq解决方案,我也犯了一个错误(我颠倒了查询)。在我可以编辑之前,您已经回答了
Except
,因此我决定放弃:)注意:您也可以将
StringComparer
Except
一起使用(您仅在
HashSet
中提到它)。
!fileInfoArray.Select(fi=>fi.Name).Except(list).Any();
List<string> fileNames = ... 
FileInfo[] fileInfos = ...  

var missing = fileInfos.Except(fileNames);
var anyMissing = fileInfos.Except(fileNames).Any()