繁体   English   中英

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

[英]How can i check if a files already exist in the List?

这是代码:

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中已经

您可以使用.Contains方法:

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

在添加之前,这将检查files[i]在集合中尚不存在。

您可以尝试使用与众不同的属性和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++;
}
pdf1.Lightnings.AddRange(files.Distinct());

要么

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

使用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更好取决于您的用法,但它可以保证唯一的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM