2016-12-19 22 views
1

私は簡単な質問があります。 いくつかのnull変数を型にキャストするとします。私はコンパイラがSome Exceptionを投げることを期待していますが、そうではありません。そして私は本当にその理由を知りたい。 オペレータが例外処理を扱うように私は、多分最初のものでnull値を型にキャスト

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


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

を意味します。しかし、他のサンプルは例外をスローする必要があります。コンパイラがこれらの状況をどのように処理するかは、変数がnullでキャスト操作を実行しない可能性がありますか?実際にnullポインタをキャストすると、エラーでなければなりません。

+8

私はここで問題を見ることはできませんが、これらのすべてのタイプ(ほとんどの場合TestClassの場合)はnull可能であるため、キャストできるようになります –

+1

+1 @AlfieGoodacre参照型( 'class')であり、値型(' struct')ではありません。それで、あなたはすてきであるはずです。 –

+0

文字列にnullを割り当てることができます。すなわち、 文字列str = null; – FaizanRabbani

答えて

2

に従って:https://msdn.microsoft.com/en-us/library/ms173105.aspx(明示的な変換)は、基本型から派生型にキャストできます。

キャストルートが存在する限り、nullはすべての参照タイプに対して有効な値なので、正常であるはずです。

object null - >TestClass nullとして動作します。objectは、すべての参照型のスーパークラスです。

あなたはstring nullをしようとした場合しかし、 - >TestClassヌル(TestClassと仮定するとstringのサブタイプではありません)TestClassstringの派生型ではないとして、あなたは、コンパイル・エラーがあります。

関連する問題