Lambda表达式:== vs. .Equals()

时间:2010-02-16 14:35:41

标签: c# lambda

这是一个纯粹的学术问题,但在lambda表达式中使用==和.Equals以及首选哪一个有什么区别?

代码示例:

int categoryId = -1;
listOfCategories.FindAll(o => o.CategoryId == categoryId);

int categoryId = -1; 
listOfCategories.FindAll(o => o.CategoryId.Equals(categoryId));

6 个答案:

答案 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)