我有两个FileInfo []数组,我想比较具有相同名称的文件的文件大小和上次修改日期。但是如何从具有特定名称的FileInfo []中选择文件?
我的代码不起作用,因为我无法使用FileInfo.Select来获取新的FileInfo。有线索吗?
foreach (FileInfo origFile in fiArrOri6)
{
FileInfo destFile = fiArrNew6.Select(file => file.Name == origFile.Name);
if (origFile.Length != destFile.Length || origFile.LastWriteTime != destFile.LastWriteTime)
{
//do sth.
}
}
感谢您的帮助:)
顺便说一句。解决这个问题的任何其他迷人解决方案都会很棒。 顺便说一句。 #2:有人为FileInfo提供了很好的学习材料吗?
答案 0 :(得分:4)
您可以使用FirstOrDefault that takes a filter
FileInfo destFile = fiArrNew6.FirstOrDefault(file => file.Name == origFile.Name);
或者,如果您不想使用默认值,则可以使用等效的First that takes a filter
FileInfo destFile = fiArrNew6.First(file => file.Name == origFile.Name);
答案 1 :(得分:2)
destFile
不是FileInfo,它是一个linq查询。将其名称更改为fileQuery
然后
var fileQuery = fiArrNew6.Where(file => file.Name == origFile.Name);
var destFile = fileQuery.FirstOrDefault();
if (destFile != null)
//...
额外提示:避免像fiArrNew6
这样的名字;他们很困惑。像newFiles
这样的描述性名称更容易阅读,它们允许您更改代码而无需重命名变量。
答案 2 :(得分:1)
将Select
更改为Where
:
FileInfo destFile = fiArrNew6.Where(file => file.Name == origFile.Name).First();
Where
将使用IEnumerable<FileInfo>
返回First
,这将确保使用第一个此类事件(如果没有,则会抛出异常)。