0

2つの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

3 に答える 3

5

フィルタを使用するFirstOrDefaultを使用できます

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

または、デフォルトが必要ない場合は、フィルターを使用する同等のFirstを使用できます。

FileInfo destFile = fiArrNew6.First(file => file.Name == origFile.Name);
于 2012-04-17T15:12:34.963 に答える
2

destFileFileInfoではなく、linqクエリです。その名前を次のようなものに変更してfileQueryから

var fileQuery = fiArrNew6.Where(file => file.Name == origFile.Name);
var destFile = fileQuery.FirstOrDefault();
if (destFile != null)
    //...

ボーナスのヒント:fiArrNew6;のような名前は避けてください。彼らは混乱しています。のようなわかりやすい名前newFilesは読みやすく、変数の名前を変更せずにコードを変更できます。

于 2012-04-17T15:08:59.580 に答える
1

を:に変更SelectWhereます

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

Whereを返し、 withをIEnumerable<FileInfo>使用Firstすると、最初のそのようなオカレンスが使用されるようになります(存在しない場合は、例外がスローされます)。

于 2012-04-17T15:09:05.730 に答える