Я смотрел на справочник для .NET и реализации Equals для Int32
, к примеру, выглядит следующим образом:Почему базовые типы C# 'Equals реализуют два раза?
public override bool Equals(Object obj) {
if (!(obj is Int32)) {
return false;
}
return m_value == ((Int32)obj).m_value;
}
Я посмотрел на Чару и Bool, и они оба делают тоже самое.
Источник: http://referencesource.microsoft.com/mscorlib/R/13ad4f778352f7c4.html
Это, однако, нарушает CA1800: Do not cast unnecessarily
.
Кроме того, я провел несколько простых тестов с is
и создал локальную переменную, и последнее, похоже, всегда дает лучшую производительность. Это как-то не относится к базовым типам? И, если нет, не правильно ли предположить, что, поскольку это базовый метод, его можно назвать миллионы раз в алгоритме, и, следовательно, производительность должна быть приоритетной?
Как бы вы разыгрываете не-обнуляемым примитивный только один раз, не подвергаясь стоимости потенциального исключения? –
Были ли ваши тесты с помощью 'struct' или' class'? – juharr
@juharr. Тесты были с int, как и в примере, который я опубликовал. @ PatrykĆwiek прав, хотя я не помню, что кастинг с '(int)' может вызывать исключение. –