代码之家  ›  专栏  ›  技术社区  ›  Tom Ritter

列表是否按引用或值进行比较?

  •  6
  • Tom Ritter  · 技术社区  · 17 年前
    List<tinyClass> ids = new List<tinyClass();
    ids.Add(new tinyClass(1, 2));
    
    bool b = ids.IndexOf(new tinyClass(1, 2)) >= 0; //true or false?
    

    如果按值进行比较,则应返回true;如果通过引用,它将返回false。

    5 回复  |  直到 17 年前
        1
  •  17
  •   Peter Mortensen Pieter Jan Bonestroo    5 年前

    此方法使用默认相等比较器EqualityComparer确定相等<T>。默认为T,列表中的值类型。

    它似乎使用了Equals方法,除非存储的类实现了IEquatable<T>界面

        2
  •  2
  •   Tom Ritter    17 年前

    对于默认实现为Equals的类,它将通过引用进行比较。

        3
  •  2
  •   Timothy Carter    17 年前

    它取决于对象对.Equals(..)的实现。默认情况下,将比较对象的引用。如果您确实将其更改为struct,那么我相信基于私有成员的平等性,它的计算结果将为true,但在编程上实现IEquatable更合理。

        5
  •  0
  •   Peter Mortensen Pieter Jan Bonestroo    5 年前

    它还可能与列表中保留了哪个类或结构实例有关,因为结构是

    推荐文章