以下是一些示例代码。
我创建了自己的课程:
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()方法一起使用会更好吗?
答案 0 :(得分:2)
由于您使用==
进行了检查,因此您需要提供==
运算符(这也意味着您需要提供!=
运算符)。否则,将应用引用相等(因为它是一个类),并且:它不太可能是相同的对象(只是一个等价的对象)。
或者,您可以覆盖Equals
并更改测试以使用.Equals
(注意:如果您这样做,也会覆盖GetHashCode()
。)
然而,更简单的选择可能是直接检查相关的内在值,即
public string Guid => _guid;
和
.Where(mo => mo.Guid == inputObject.Guid)