List <>.IndexOf按引用或值进行比较?

Tom*_*ter 6 .net c#

List<tinyClass> ids = new List<tinyClass();
ids.Add(new tinyClass(1, 2));

bool b = ids.IndexOf(new tinyClass(1, 2)) >= 0; //true or false?
Run Code Online (Sandbox Code Playgroud)

如果按值进行比较,则应返回true; 如果通过引用,它将返回false.
如果它通过引用进行比较,我将tinyClass作为一个结构 - 这会有所作为吗?

Ore*_*ost 16

来自MSDN:

此方法使用默认的相等比较器EqualityComparer <T> .Default for T(列表中的值的类型)确定相等性.

Default属性检查类型T是否实现System.IEquatable <T>泛型接口,如果是,则返回使用该实现的EqualityComparer <T>.否则返回一个EqualityComparer <T>,它使用由T提供的Object.Equals和Object.GetHashCode的覆盖.

似乎它使用Equals方法,除非存储的类实现IEquatable <T>接口.