Подтвердить что ты не робот

Кастинг для объекта в исходном источнике .NET

Я просматривал файл OperatingSystem.cs в исходном источнике .NET и отмечал этот код в строке 50:

if ((Object) version == null)

version является объектом класса version, что означает, что version происходит от Object. Если это так, разве это не избыточное литье на Object? Разве это не было бы так же, как это?

if (version == null)
4b9b3361

Ответ 1

Нет, это не эквивалентно, потому что Version перегружает оператор ==.

Фрагмент, переводящий левый операнд в Object, эквивалентен:

if (Object.ReferenceEquals(version, null))

... вместо вызова реализации operator== в Version. Вероятно, это может сделать проверку недействительности как ее первое действие, но это просто обходит лишний уровень.

В других случаях это может иметь очень важное значение. Например:

string original = "foo";
string other = new string(original.ToCharArray());
Console.WriteLine(original == other); // True
Console.WriteLine((object) original == other); // False