web-dev-qa-db-ja.com

null値を型にキャストします

簡単な質問があります。 null変数を型にキャストした場合。コンパイラが例外をスローすることを期待していますが、そうではありません。そして、私は本当にその理由を知りたいです。というのは

string sample1 = null as string;
string sample2 = (string)null;


object t1 = null;
TestClass t2 = (TestClass)t1; 

オペレーターが例外処理を処理するため、おそらく最初のものです。ただし、他のサンプルは例外をスローする必要があります。コンパイラはこれらの状況をどのように処理しますか?おそらく変数がnullであるため、キャスト操作を実行しませんか?原因が実際にNULLポインターをキャストする場合、エラーでなければなりません。

13
UfukSURMEN

ドキュメントによれば (明示的な変換)ベース型から派生型にキャストできます。

nullはすべての参照タイプに有効な値であるため、キャストルートが存在する限り問題ありません。

object null→TestClass nullは、objectがすべての参照型のスーパークラスであるように機能します。

ただし、string null→TestClass null(TestClassstringのサブタイプではないと想定)を試してみると、コンパイルエラーがTestClassは、stringの派生型ではありません。

19
Stephan