Array.IndexOf: равно и сравнить - PullRequest
1 голос
/ 28 августа 2009

В этой статье MSDN говорится, что

В .NET Framework версии 2.0 этот метод использует методы Equals и CompareTo массива , чтобы определить, существует ли объект, указанный параметром value. В более ранних версиях .NET Framework это определение было сделано с использованием методов Equals и CompareTo для самого значения Object .

Что именно это значит? Из того, что я могу сказать, используя Reflector, Array.IndexOf по-прежнему использует метод equals объекта для определения индекса объекта в массиве:

for (int j = startIndex; j < num3; j++)
{
    object obj2 = objArray[j];
    if ((obj2 != null) && obj2.Equals(value))
    {
        return j;
    }
}

Это - это , что я ожидал, но меня немного смущает замечание MSDN .

1 Ответ

3 голосов
/ 28 августа 2009

Это (очень) плохо сформулировано, но это означает, что в 1.1 он искал arrayElement с

value.Equals(arrayElement) == true

в то время как в 2.0 он ищет один с

arrayElement.Equals(value) == true

То есть эквивалентный кусок отраженного кода из 1.1 был

for (int j = startIndex; j < num3; j++)
{
    object obj2 = objArray[j];
    if ((obj2 != null) && value.Equals(obj2))
    {
        return j;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...