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

Rob*_*t W 15 c# lambda

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

代码示例:

int categoryId = -1;
listOfCategories.FindAll(o => o.CategoryId == categoryId);
Run Code Online (Sandbox Code Playgroud)

要么

int categoryId = -1; 
listOfCategories.FindAll(o => o.CategoryId.Equals(categoryId));
Run Code Online (Sandbox Code Playgroud)

Joe*_*orn 9

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

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

  • 嗯,`string`类型怎么样?它是一个引用类型,但`==`查找值相等,而不是引用相等. (4认同)
  • 实际上,更多的区别是Java,其中operator ==不能重载以显示值相等. (3认同)
  • System.String是一个RTINO(仅在名称中引用类型).出于优化原因,它被实现为引用类型.它被设计成由消费者以各种方式对待,如价值类型. (3认同)