Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查列表中是否已存在文件?_C# - Fatal编程技术网

C# 如何检查列表中是否已存在文件?

C# 如何检查列表中是否已存在文件?,c#,C#,代码如下: for (int i = 0; i < lightningsRegions.Count; i++) { if (!pdf1.Lightnings.Contains(lightningsRegions[i])) { pdf1.Lightnings.Add(lightningsRegions[i]); break; } } 这是一个新表单中的listBox1,我在其中选择项目。 所以我想说,如果我在同一个项目上点击它或移动它

代码如下:

for (int i = 0; i < lightningsRegions.Count; i++)
{
    if (!pdf1.Lightnings.Contains(lightningsRegions[i]))
    {
        pdf1.Lightnings.Add(lightningsRegions[i]);
        break;
    }
}
这是一个新表单中的listBox1,我在其中选择项目。 所以我想说,如果我在同一个项目上点击它或移动它,它将不会将它添加到Lightings列表中,不是同一个项目,也不是任何其他项目!!只有当我移动或点击一个不在Lightings列表中的项目时,才可以添加它

您可以使用


使用Contains时,相等用于确定列表是否确实包含要检查的实例,但如果比较引用类型而不是值类型,相等的行为不同

因此,不要使用Contains,而是尝试使用Linq扩展方法Any(),并在作为参数给定的委托方法中放置与您相关的字段


为了验证我所说的确实正确,您可以在调试时进行检查,您将看到,即使列表中已经包含您正在搜索的内容,您的代码仍将添加一个新实例,该实例对您来说是重复的,但随着实例的进行,它们并不相等,除非它们指向内存中的同一区域


因此,如果lightningRegion.Text(例如(“Length 32[41-73]”)与您相关,那么在if子句检查中不会添加两次:

if (!pdf1.Lightnings.Any(lightningRegion => lightningRegion.Text == lightningRegions[i].Text)
{
}

现在我再次检查,当我点击菜单中的同一项时,它将添加下一项我的意思是,如果我点击同一项,它将添加下一项,如果我再次点击第一项,它将添加下一项索引4 5 6,依此类推……问题是,如果用户已经点击了一项,它将不会添加什么都可以。只有当他点击了Lightings列表中不存在的项目时,才添加该项目!如果我正确地遵循了您的描述,那么您显示的代码片段就可以了。你的问题必须在其他地方。你的样本是否可以考虑我的最后一个评论?如果你解释为什么使用LINQ来解决他的问题,那就太好了。用我从列表框中选择项目的代码更新我的问题。问题仍然存在,如果列表中的lightningRegions对您来说是唯一的,因为某个属性必须是唯一的(例如“文本”),那么使用我给您的解决方案。
var result = pdf1.Lightnings.Any(c=>lightningsRegions.Contains(c));
if (!pdf1.Lightnings.Any(lightningRegion => lightningRegion.Text == lightningRegions[i].Text)
{
}