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

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

代码示例:

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

要么

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

对于引用类型,==旨在传递引用相等性 – 这两个变量是否引用相同的对象实例。
.Equals()旨在传达值相等 – 两个变量引用的两个可能不同的对象实例具有相同的值,对于通过重载方法提供的“相同”的某些定义。

对于价值类型,这两个含义是模糊的。

它们可以单独过载,因此可以提供不同的答案。 请参阅http://msdn.microsoft.com/en-us/library/ms173147(VS.80).aspx ,其中讨论了如何重载每个。 通常他们会是相同的,但不能保证。 所以它取决于lambda对象的类型。

这是重复的

==和等于()之间的C#差异

关于不同类型的平等的一些额外想法以及它们如何做你真正想要的,请参阅

http://blogs.msdn.com/ericlippert/archive/2009/04/09/double-your-dispatch-double-your-fun.aspx

这取决于为对象定义的内容。 如果没有为类定义operator ==,它将使用Object类中的一个,它在最终调用Equals()之前检查Object.ReferenceEquals。

这显示了一个重要的区别:如果你说A.Equals(B)那么A必须是nun-null。 如果你说A == B ,A可能为空。

Lambda在这里无关紧要……

对于值对象==和equals是相同的对于引用对象==如果对象是同一个对象(指向同一个实例),则为true,而期望等于对象的内容。 此链接以另一种方式解释它。

这在Java世界中确实更为突出 。 基本上’==’是运算符重载,而.Equals()是Object类的基本方法 。