Сравнить по ссылке?

При работе с классом List из System.Collections.Общие методы, такие как Contains или IndexOf, будут сравнивать объект переданной ссылки, используя либо метод Equals, реализованный из IEquatable, либо переопределенный метод Equals, предоставленный классом Object. Если Object.Equals не переопределен, он проверит, указывает ли переданная ссылка на тот же объект, что и он сам.

Мой вопрос: есть ли способ сравнить список по ссылке, если Equals переопределен? Приведенный ниже код удалит элемент из списка:

class Program
{
    static void Main(string[] args)
    {    
        var s1 = new SomeClass() { A = 5 };
        var s2 = new SomeClass() { A = 5 };
        var list = new List<SomeClass>();
        list.Add(s1);
        list.Remove(s2); // s1 will get removed, even though s2 has been 
                         // passed, because s1's Equals method will return true.

    }
}

class SomeClass
{
    public int A { get; set; }

    public override bool Equals(object obj)
    {
        SomeClass s = obj as SomeClass;
        if (s == null)
        {
            return false;
        }
        else
        {
            return s.A == this.A;
        }
    }   
}

Допустим, я не могу удалить реализацию Equals в SomeClass, есть ли способ сравнить List по ссылке вместо значения?

10
задан Jason Down 14 February 2012 в 01:26
поделиться