包含总是假的,因为引用不一样?

时间:2011-08-25 13:20:14

标签: c# wpf generic-list

我正在实现一个应用程序,您必须验证某个对象是否在列表中。这种情况发生在.contains我知道,但是我用XML文件填充我的列表,然后我新检查了列表是否包含这个的对象,因此引用不一样而且{{1}永远都是假的 有谁知道解决这个问题?这是代码:

.Contains

if (qfs.Contains(exa.Question.File)) { booleansQuestionFile[i] = true; } 语句始终为false。

4 个答案:

答案 0 :(得分:5)

the documentation中所述,Contains使用默认的相等比较器。要更改默认行为,请使您的类实现IEquatable<T>或覆盖Equals

答案 1 :(得分:2)

你应该覆盖Equals method这样你可以定义两个对象何时相同。

答案 2 :(得分:1)

存储在列表中的对象应该实现IEquatable。这样,引用不同并不重要,它仍然会正确地比较它们。


这是一个显示示例的link to an article。这个blog post更详细。

答案 3 :(得分:1)

您也可以使用此类代码,它将为您节省更改课程的需要:

if (qfs.Exists(f => f.Question.File.Equals(exa.Question.File)))
{
    booleansQuestionFile[i] = true;
}