这是一个纯粹的学术问题,但在lambda表达式中使用==和.Equals以及首选哪一个有什么区别?
代码示例:
int categoryId = -1;
listOfCategories.FindAll(o => o.CategoryId == categoryId);
或
int categoryId = -1;
listOfCategories.FindAll(o => o.CategoryId.Equals(categoryId));
答案 0 :(得分:9)
对于引用类型,==旨在传达引用相等性 - 两个变量是否引用相同的对象实例。
.Equals()
旨在传达值相等 - 两个变量引用的两个可能不同的对象实例具有相同的值,对于您通过重载方法提供的“相同”的某些定义。
对于价值类型,这两种含义是模糊的。
答案 1 :(得分:2)
它们可以单独重载,因此可以提供不同的答案。请参阅http://msdn.microsoft.com/en-us/library/ms173147(VS.80).aspx,其中讨论了如何使每个超载。通常他们会是一样的,但不能保证。所以它取决于lambda对象的类型。
答案 2 :(得分:2)
这是
的副本C# difference between == and Equals()
关于不同类型的平等的一些额外想法以及它们如何做你真正想要的,请参阅
http://blogs.msdn.com/ericlippert/archive/2009/04/09/double-your-dispatch-double-your-fun.aspx
答案 3 :(得分:0)
这取决于为对象定义的内容。如果没有为类定义operator ==,它将使用Object类中的一个,它在最终调用Equals()之前检查Object.ReferenceEquals。
这显示了一个重要的区别:
如果你说A.Equals(B)
那么A必须是nun-null。如果你说A == B
,A可能为空。
答案 4 :(得分:0)
Lambda与此无关......
对于值对象==和equals是相同的 对于引用对象==如果对象是同一个对象(指向同一个实例),则为true,而期望等于对象的内容。这link 用另一种方式解释。
答案 5 :(得分:0)