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