如何检查列表中是否已存在文件?

时间:2012-12-24 18:00:15

标签: c#

这是代码:

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个索引(文件名),我想将它们添加到闪电列表中。 但我想检查一下,如果文件列表中的文件名已存在于Lightnings中,那么不要再添加它。

现在的方式我收到错误,因为变量i = 1时所以行:

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

引发错误,因为在闪电中我只有一个索引[0]而在i = 1中已经

5 个答案:

答案 0 :(得分:3)

您可以使用.Contains方法:

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

这将在添加之前检查集合中是否已存在files[i]

答案 1 :(得分:1)

您可以尝试使用distinct属性和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++;
}

答案 2 :(得分:1)

pdf1.Lightnings.AddRange(files.Distinct());

pdf1.Lightnings = pdf1.Lightnings.Union(files));

答案 3 :(得分: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)));

答案 4 :(得分:1)

作为已经给出的答案的替代方案,如果您想要一个唯一的项目列表,则可以使用HashSets代替。当然,HashSet是否优于List取决于您的用法,但它保证了唯一值。