我应该覆盖哪些方法来使用LINQ Where,Find?

时间:2016-11-18 11:54:58

标签: c# linq override

以下是一些示例代码。

我创建了自己的课程:

public class MyObject {
    private string _guid;
    public int Value;

    // other stuff here...        

    public MyObject() {
        _guid = Guid.NewGuid().ToString();
    }
}

我之前创建了一些对象和其他对象列表,例如:

MyObject inputObject = new MyObject();
List<MyObject> myObjects = new List<MyObject>();

我想使用它们:

myObjects.Where(mo => mo == inputObject).Sum(fo => fo.Value);

等等。 (我确信在我的列表中有一个与 inputObject 具有相同GUID的对象,这只是示例代码)

问题是:

如何在此列表中使用LINQ Find,Where,Sum等?

我应该覆盖哪些方法来比较GUID以及它们应该是什么样的?

将IEquatable与Equals()方法一起使用会更好吗?

1 个答案:

答案 0 :(得分:2)

由于您使用==进行了检查,因此您需要提供==运算符(这也意味着您需要提供!=运算符)。否则,将应用引用相等(因为它是一个类),并且:它不太可能是相同的对象(只是一个等价的对象)。

或者,您可以覆盖Equals并更改测试以使用.Equals(注意:如果您这样做,也会覆盖GetHashCode()。)

然而,更简单的选择可能是直接检查相关的内在值,即

public string Guid => _guid;

.Where(mo => mo.Guid == inputObject.Guid)