[英]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.