1

これはコードです:

for (int i = 0; i < files.Count; i++)
{
    if (pdf1.Lightnings.Count == 0)
    {
        pdf1.Lightnings.Add(files[i]);
    }
    if (files[i] != pdf1.Lightnings[i])
    {
        pdf1.Lightnings.Add(files[i]);
    }
}

ファイルとライトニングの両方がList<string>

たとえば、ファイルには 33 個のインデックス (ファイル名) があり、それらを Lightning リストに追加したいと考えています。しかし、ファイルのリストのファイル名がすでに Lightnings に存在するかどうかを確認したいので、再度追加しないでください。

変数 i=1 の場合、次の行からエラーが発生します。

if (files[i] != pdf1.Lightnings[i])

Lightnings にはインデックス [0] が 1 つしかなく、i=1 には既にあるため、エラーをスローします

4

5 に答える 5

3

.Contains次の方法を使用できます。

if (!pdf1.Lightnings.Contains(files[i]))
    pdf1.Lightnings.Add(files[i]);

files[i]これにより、追加する前にコレクションにまだ存在しないことが確認されます。

于 2012-12-24T18:04:40.240 に答える
1

これは、LINQを使用して非常に簡単に実行できます。また、作成する必要のあるコードの量も削減されます。

var itemsToAdd = files.Where(x => !pdf.Lightnings.Contains(x));
pdf.Lightnings.AddRange(itemsToAdd);

それでも読めると思ったら一行でも

pdf.Lightnings.AddRange(files.Where(x => !pdf.Lightings.Contains(x)));
于 2012-12-24T18:13:48.260 に答える
1

すでに与えられた答えの代わりに、アイテムの一意のリストが必要な場合は、代わりにHashSetsを使用できます。もちろん、HashSetがリストよりも優れているかどうかは使用法によって異なりますが、一意の値が保証されます。

于 2012-12-24T18:14:47.730 に答える
1
pdf1.Lightnings.AddRange(files.Distinct());

また

pdf1.Lightnings = pdf1.Lightnings.Union(files));
于 2012-12-24T18:08:43.693 に答える
1

個別のプロパティと foreach ループを使用してみることができます。

var count = 0;
foreach(var file in files.Distinct())
{

    if (pdf1.Lightnings.Count == 0)
    {
        pdf1.Lightnings.Add(file);
    }
    if (files[i] != pdf1.Lightnings[count])
    {
        pdf1.Lightnings.Add(file);
    }
    count++;
}
于 2012-12-24T18:05:16.013 に答える