如何在List <t>中找到项目?</t>

时间:2014-02-21 20:38:22

标签: c# list

需要搜索List以查看它是否包含匹配的对象。不能使用Linq所以需要去上学。

在允许将新对象添加到TranslatorScriptList之前,我需要进行重复检查。

TranslatorScript ts = new TranslatorScript(blah1, blah2, blah3);
if (TranslatorScriptList.Contains(ts))
{
    // Matches, do stuff
}

它们属于同一类型,但它来自.contains不匹配,因为“ts”实际上不在列表中,所以当它比较内存地址不匹配时。

如何简单地检查列表中是否已存在该对象?

由于

3 个答案:

答案 0 :(得分:5)

您可以使用Exists代替Contains,这样您就可以传入Predicate<T>。请注意,这不是LinqExists直接在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