1

这是代码:

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 个索引(文件名),我想将它们添加到闪电列表中。但我想检查文件列表中的文件名是否已经存在于闪电中,所以不要再次添加它。

现在的方式我收到错误,因为当变量 i=1 时,所以行:

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

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

4

5 回答 5

3

您可以使用以下.Contains方法:

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

这将files[i]在添加之前检查集合中不存在的内容。

于 2012-12-24T18:04:40.240 回答
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++;
}
于 2012-12-24T18:05:16.013 回答
1
pdf1.Lightnings.AddRange(files.Distinct());

或者

pdf1.Lightnings = pdf1.Lightnings.Union(files));
于 2012-12-24T18:08:43.693 回答
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)));
于 2012-12-24T18:13:48.260 回答
1

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

于 2012-12-24T18:14:47.730 回答