Это вопрос о языке С# или, по крайней мере, о том, как этот язык реализован в Visual Studio.
Предположим, что у кого-то есть класс Foo, который определяет неявный оператор в System.DateTime
public static implicit operator DateTime(Foo item)
Рассмотрим следующий код:
Foo foo = SomeMethodWhichCanReturnNull();
DateTime? dtFoo = foo;
Что бы я ожидал:
Невозможно скомпилировать жалобу, что нет преобразования от Foo
до DateTime?
.
То, что я нахожу: Компилятор фактически вызывает определенный неявный оператор от Foo
до DateTime
и сбой, когда ему передается нуль (это единственный способ, с помощью которого конвертер может реагировать на нуль).
Конечно, обход - это определить
public static implicit operator DateTime?(Foo item)
но зачем мне это делать? Разве не DateTime
и DateTime?
два разных типа?