Здравствуйте, rameel, Вы писали:
R>Всем привет!
R>В дополнение к серии на тему различных WTF, начатаю ув. Sinix
R>Итак. Даны 2 примера кода:
R>R>[MethodImpl(MethodImplOptions.NoInlining)]
R>public static int GetNumber_1(object value)
R>{
R> var v = value as int?;
R> if (v != null)
R> return v.GetValueOrDefault();
R> return 0;
R>}
R>[MethodImpl(MethodImplOptions.NoInlining)]
R>public static int GetNumber_2(object value)
R>{
R> if (value is int)
R> return (int)value;
R> return 0;
R>}
R>
R>Что здесь не так? Оба кода делают одно и тоже — возвращают забоксенное значение в случае, если там int и 0 в противном случае.
Я правильно понимаю, что грабли зарыты в value as int?; ?
Судя по всему там анбокс до инта, потом создание nullable<int>, потом приведение к нему.