如何检查列表中是否已存在文件
本文关键字:是否 存在 文件 列表 何检查 检查 | 更新日期: 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));