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()