Информация об изменениях

Сообщение Re[4]: Минутка WTF-20: Меньше кода - меньше ошибок от 07.11.2017 8:40

Изменено 07.11.2017 8:57 yenik

Re[4]: Минутка WTF-20: Меньше кода - меньше ошибок
V>>>Предположу, что вызовется Equals(object)
V>>>Поскольку компилятор не знает (нет ограничения where) что тип может быть значимым. Поэтому всё компилирует как для object-ов. Ну и соответственно 10 == null что есть false.

Y>>А почему так работает правильно?


Y>>
Y>>static bool IsDefault<T>(T value) => Equals(value, default(T));
Y>>

Y>>Тут тоже нет where.

_NN>Тут же явно указан default(T) .


А T — ссылочный или структурный? Это же не указано.
Re[4]: Минутка WTF-20: Меньше кода - меньше ошибок
V>>>Предположу, что вызовется Equals(object)
V>>>Поскольку компилятор не знает (нет ограничения where) что тип может быть значимым. Поэтому всё компилирует как для object-ов. Ну и соответственно 10 == null что есть false.

Y>>А почему так работает правильно?


Y>>
Y>>static bool IsDefault<T>(T value) => Equals(value, default(T));
Y>>

Y>>Тут тоже нет where.

_NN>Тут же явно указан default(T) .


А T — ссылочный или структурный? Это же не указано.

Да, собственно, ответ уже дан: http://rsdn.org/forum/dotnet/6956070.1
Автор: Jack128
Дата: 06.11.17


В доке сказано.

You can now omit the type on the right-hand side of the initialization:
C#

Func<string, bool> whereClause = default;


Но в случае с Equals(value, default) компилятор не может угадать тип и выбирает object.Equals(value, default(object)).