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

本文关键字:是否 存在 文件 列表 何检查 检查 | 更新日期: 2023-09-27 17:49:30

这是代码:

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]);
    }
}

文件和Lightnings都是List<string>

例如,在文件中,我有33个索引(文件名(,我想将它们添加到Lightnings列表中。但我想检查Lightnings中是否已经存在文件列表中的文件名,所以不要再添加它。

现在的情况是,我得到了错误,因为当变量I=1时,行:

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

抛出一个错误,因为在Lightnings中我只有一个索引[0],在i=1中已经有

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

您可以使用.Contains方法:

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

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

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

使用LINQ可以很容易地完成这项工作,它还可以减少您需要编写的代码量,例如

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

即使是一行,如果你仍然发现它可读

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

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

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

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