2012-04-17 3 views
0

У меня есть два файла FileInfo [] Array, и я хочу сравнить файлы с идентичными именами об их размере файла и последней модифицированной дате. Но как я могу выбрать файл из 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. 
      } 
     } 

Спасибо за любую помощь :)

кстати. Любое другое очаровательное решение для этой проблемы было бы здорово. кстати. # 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

Изменение Select в Where:

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

Where будет возвращать IEnumerable<FileInfo>, используя First с этим обеспечит первое такое вхождение используется (если их нет, то будет сгенерировано исключение).

+0

'Where' будет возвращать' IEnumerable ', а не' FileInfo'. – shambulator

+0

@ Антон - правда. Ответ обновлен. – Oded