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)
这些陈述会产生相同的结果吗?
我知道Equals比较存储在引用中的值,而"=="比较两个引用是否指向同一个对象.
不,这只是引用类型的默认 ==运算符的行为.如果双方==都具有编译时类型string,则使用bool operator==(string, string)在string类中声明的重载,并且Equals当调用的目标不为null时,您将得到相同的结果.
这种行为在常规代码中与lambda表达式完全相同.用lambda表达式编写的代码应该与不在 lambda表达式中编写的代码完全相同...尽管如果将lambda表达式转换为表达式树,编译器只会将代码作为数据发出,因此它取决于消耗的内容表达式树用它做正确的事.
所以是的,代码应该绝对正常 - 使用Equals和使用之间的唯一区别==是,如果列表包含任何null元素,则x.Equals(...)调用将抛出一个NullReferenceException.就个人而言,我通常==只是为了简单而比较字符串.