需要搜索List以查看它是否包含匹配的对象。不能使用Linq所以需要去上学。
在允许将新对象添加到TranslatorScriptList之前,我需要进行重复检查。
TranslatorScript ts = new TranslatorScript(blah1, blah2, blah3);
if (TranslatorScriptList.Contains(ts))
{
// Matches, do stuff
}
它们属于同一类型,但它来自.contains不匹配,因为“ts”实际上不在列表中,所以当它比较内存地址不匹配时。
如何简单地检查列表中是否已存在该对象?
由于
答案 0 :(得分:5)
您可以使用Exists
代替Contains
,这样您就可以传入Predicate<T>
。请注意,这不是Linq
。 Exists
直接在List<T>
。
TranslatorScript ts = new TranslatorScript(blah1, blah2, blah3);
if (TranslatorScriptList.Exists(item => item.Blah1 == ts.Blah1))
{
// Matches, do stuff
}
编辑:重新阅读您的问题,看起来您只想在不存在的情况下添加,以便我们可以简单地更改条件:
TranslatorScript ts = new TranslatorScript(blah1, blah2, blah3);
if (!TranslatorScriptList.Exists(item => item.Blah1 == ts.Blah1))
{
TranslatorScriptList.Add(ts);
}
答案 1 :(得分:4)
您可以使用Find。这将允许您提供一个返回您要查找的项目的谓词。
TranslatorScript ts = new TranslatorScript(blah1, blah2, blah3);
var match = TranslatorScriptList.Find(x => x.Property == ts.Property);
if (match != null)
{
// Matches, do stuff
}
答案 2 :(得分:1)
您可以对TranslatorScript
进行编码,使其实现IEquatable<TranslatorScript>
并覆盖GetHashCode()
,使一个实例与另一个实例匹配。
有关详细信息,请参阅此处:http://msdn.microsoft.com/en-us/library/ms131190(v=vs.110).aspx