Сообщение 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>>Тут тоже нет where.
_NN>Тут же явно указан default(T) .
А T — ссылочный или структурный? Это же не указано.
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>>Тут тоже нет where.
_NN>Тут же явно указан default(T) .
А T — ссылочный или структурный? Это же не указано.
Да, собственно, ответ уже дан: http://rsdn.org/forum/dotnet/6956070.1
В доке сказано.
Но в случае с Equals(value, default) компилятор не может угадать тип и выбирает object.Equals(value, default(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
Дата: 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)).