これは、C# 言語、または少なくともその言語が Visual Studio でどのように実装されているかについての質問です。
暗黙の演算子を System.DateTime に定義するクラス Foo があるとします。
public static implicit operator DateTime(Foo item)
次のコードを検討してください。
Foo foo = SomeMethodWhichCanReturnNull();
DateTime? dtFoo = foo;
私が期待すること:Foo
からへ
の変換がないことを訴えるコンパイルの失敗DateTime?
。
私が見つけたもの:コンパイラは実際に定義された暗黙の演算子をFoo
toから呼び出し、 DateTime
nullが渡されるとクラッシュします(コンバーターがnullに応答できる唯一の方法です)。
もちろん、回避策は定義することです
public static implicit operator DateTime?(Foo item)
しかし、なぜ私はこれをしなければならないのですか?DateTime
とDateTime?
2つの異なるタイプではありませんか?