Linq Lambda表达式==和等于运算符

Pra*_*abu 2 .net c# lambda

var list = new List<string>();
var word = "some word";
list.Add("some word");
list.Add("some sentence");
list.Add(word);
Run Code Online (Sandbox Code Playgroud)

我知道Equals比较存储在引用中的值,而"=="比较两个引用是否指向同一个对象.但即使在lambda表达式中它也是一样的吗?

list.RemoveAll(x => x.Equals("some word"));
list.RemoveAll(x => x == "some word");
Run Code Online (Sandbox Code Playgroud)

这些陈述会产生相同的结果吗?

Jon*_*eet 5

我知道Equals比较存储在引用中的值,而"=="比较两个引用是否指向同一个对象.

不,这只是引用类型的默认 ==运算符的行为.如果双方==都具有编译时类型string,则使用bool operator==(string, string)string类中声明的重载,并且Equals当调用的目标不为null时,您将得到相同的结果.

这种行为在常规代码中与lambda表达式完全相同.用lambda表达式编写的代码应该与不在 lambda表达式中编写的代码完全相同...尽管如果将lambda表达式转换为表达式树,编译器只会将代码作为数据发出,因此它取决于消耗的内容表达式树用它做正确的事.

所以是的,代码应该绝对正常 - 使用Equals和使用之间的唯一区别==是,如果列表包含任何null元素,则x.Equals(...)调用将抛出一个NullReferenceException.就个人而言,我通常==只是为了简单而比较字符串.

  • @Prabu:然后它会遵守Java的规则.没有必要就一种特定语言提问,然后假设结果将适用于所有其他语言. (3认同)