代码之家  ›  专栏  ›  技术社区  ›  Robert W

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

  •  14
  • Robert W  · 技术社区  · 16 年前

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

    代码示例:

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

    int categoryId = -1; 
    listOfCategories.FindAll(o => o.CategoryId.Equals(categoryId));
    
    6 回复  |  直到 16 年前
        1
  •  9
  •   Joel Coehoorn    16 年前

    对于引用类型,==是用来传递引用相等性的-两者都做吗 参考
    .Equals() 用于传递值相等性—对于通过重载方法提供的“相同”的某些定义,两个变量引用的两个可能不同的对象实例是否具有相同的值。

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

        2
  •  2
  •   Scott Stafford    16 年前

    它们可以分别重载,因此可以提供不同的答案。看见 http://msdn.microsoft.com/en-us/library/ms173147(VS.80).aspx 它讨论了如何重载每个。通常情况下,它们是一样的,但这不能保证。所以这取决于lambda对象的类型。

        4
  •  1
  •   Arve    16 年前

    Lambda在这里无关紧要。。。

    对于值对象==和equals是相同的 如果对象是同一个对象(指向同一个实例),则For reference object==将为真,而equals将比较对象的内容。这 link 用另一种方式解释。

        5
  •  0
  •   James Curran    16 年前

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

        6
  •  0
  •   mtmk    16 年前