2012-04-17 13 views
0

私は2つのFileInfo [] Arrayを持っています。ファイルサイズと最終更新日について、同じ名前のファイルを比較したいと思います。しかし、特定の名前のFileInfo []からFileを選択するにはどうすればよいですか?FileInfo - 1つのファイルをFileInfo []から選択する

新しいFileInfoを取得するためにFileInfo.Selectを使用できないため、コードが機能しません。すべての手がかりは?任意の助け

 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. 
      } 
     } 

感謝:)ところで

。この問題のための他の魅力的な解決策は素晴らしいでしょう。 btw。 #2:誰かがFileInfoの学習教材を持っていますか?

答えて

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); 
2

destFileはFileInfoではなく、linqクエリです。ボーナス先端

fileQueryのようなものに名前を変更して

var fileQuery = fiArrNew6.Where(file => file.Name == origFile.Name); 
var destFile = fileQuery.FirstOrDefault(); 
if (destFile != null) 
    //... 
fiArrNew6のような名前を避けます。彼らは混乱している。 newFilesのような記述名は読みやすく、変数の名前を変更せずにコードを変更することができます。

+0

1は間違いなくあなたのボーナスチップに同意を使用することができますを使用することができます:)私は常に簡潔であるとは言いませんが、短くて説明的ではありません。重視は説明的なものでなければなりません –

1

変更SelectWhereに:

FileInfo destFile = fiArrNew6.Where(file => file.Name == origFile.Name).First(); 

Where(いずれも存在しない場合、それは例外をスローします)が使用される最初のそのような発生を保証するものとFirstを使用して、IEnumerable<FileInfo>戻ります。

+0

'Where'は' FileInfo'ではなく 'IEnumerable 'を返します。 – shambulator

+0

@Anton - 十分に真実。回答が更新されました。 – Oded

関連する問題