2012-04-17 30 views
0

我有兩個FileInfo []數組,我想用文件大小和上次修改日期相同的名稱比較文件。但是,我怎樣才能從FileInfo []中選擇一個具有特定名稱的文件?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. 
      } 
     } 

感謝所有幫助:)

BTW。對於這個問題任何其他迷人的解決方案都會很棒。 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與您的獎金尖端絕對同意:)我總是說簡潔並不短,只是簡短而且具有描述性。重點應該更多描述性 – 2012-04-17 15:24:38

1

更改SelectWhere

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

Where將返回IEnumerable<FileInfo>,使用First用,以確保第一個事故發生時使用(如果沒有,它會拋出異常)。

+0

'Where'將返回'IEnumerable ',而不是'FileInfo'。 – shambulator 2012-04-17 15:10:07

+0

@安頓 - 夠正確。答案已更新。 – Oded 2012-04-17 15:12:30

相關問題