我应该重写什么方法来使用LINQ Where, Find

本文关键字:LINQ Where Find 重写 什么 方法 我应该 | 更新日期: 2023-09-27 18:18:31

下面是一些示例代码。

我已经创建了自己的类:

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查找,Where, Sum等?

我应该覆盖哪些方法来通过GUID进行比较,它们应该是什么样子?

使用等价的Equals()方法更好吗?

我应该重写什么方法来使用LINQ Where, Find

由于您正在检查==,因此需要提供==操作符(这也意味着您需要提供!=操作符)。否则,将应用引用相等性(因为它是一个类),并且:它不太可能是相同的对象(只有一个是等效的)。

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

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

public string Guid => _guid;

:

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