簡體   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