我有两个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学习材料吗?
发布于 2012-04-17 23:12:35
您可以使用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);发布于 2012-04-17 23:09:00
destFile不是FileInfo,它是linq查询。将其名称更改为类似于fileQuery的名称,然后
var fileQuery = fiArrNew6.Where(file => file.Name == origFile.Name);
var destFile = fileQuery.FirstOrDefault();
if (destFile != null)
//...额外提示:避免使用像fiArrNew6这样的名字;它们很容易混淆。像newFiles这样的描述性名称更容易阅读,它们允许您更改代码,而不必重命名变量。
发布于 2012-04-17 23:09:06
将Select更改为Where
FileInfo destFile = fiArrNew6.Where(file => file.Name == origFile.Name).First();Where将返回一个IEnumerable<FileInfo>,将First与一起使用将确保使用第一个这样的事件(如果没有,它将抛出异常)。
https://stackoverflow.com/questions/10193831
复制相似问题