这只是一个纯学术问题,但在lambda表达式中使用“==”和“.Equals”的区别是什么?哪个更受欢迎?
代码示例:
int categoryId = -1;
listOfCategories.FindAll(o => o.CategoryId == categoryId);
或
int categoryId = -1;
listOfCategories.FindAll(o => o.CategoryId.Equals(categoryId));
对于引用类型,== 的作用是判断两个变量是否指向同一对象实例。
.Equals()
的作用是判断两个不同的对象实例是否具有相同的值,你可以通过重载该方法来定义“相同”的含义。
对于值类型,这两种含义有些模糊。
==
,但如果没有重载,Joel的答案是正确的;对于引用类型来说,==
的默认行为是引用相等。 - Aaronaught它们可以分别进行重载,因此可能会提供不同的答案。请参见http://msdn.microsoft.com/en-us/library/ms173147(VS.80).aspx,其中讨论了如何重载每个对象。通常它们将是相同的,但不能保证如此。因此,这取决于lambda对象的类型。
这里 Lambda 是无关紧要的...
对于值对象,== 和 equals 是相同的。 对于引用对象,如果两个对象是同一个对象(指向同一实例),== 将为 true,而期望 equals 比较对象的内容。这个 链接 以另一种方式解释了它。
这取决于对象的定义。如果类中没有定义operator==,则会使用Object类中的operator==,该operator==在最终调用Equals()之前检查Object.ReferenceEquals。
这显示了一个重要的区别:
如果你说 A.Equals(B)
,那么A必须是非空的。如果你说A == B
,则A可以为null。
x => {}
的匿名委托的快捷方式),根据评估表达式树的人(即哪个提供程序)可能会有所不同。 - Lucero