这是代码:
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中已经
答案 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取决于您的用法,但它保证了唯一值。