2017-06-06 161 views
0

怎麼能夠從A級到B級的爲空的實例可爲空的情況下進行轉換,而B是A的子類,我試過,但它崩潰:從一個空類型轉換爲另一種可空類型

class A 
{ 
} 

class B:A 
{ 
} 

A? instance_1=something_maybe_null; 

if (instance_1.GetType() == typeof(B)) 
{ 
    ((B)(instance_1))?.some_method_in_B(paramters); 
} 

如果我移動?到parathesis,它不會編譯:

... 
if (instance_1.GetType() == typeof(B)) 
{ 
    ((B)(instance_1)?).some_method_in_B(paramters); 
} 
+6

你不能有可爲空的引用類型,只能爲可爲null的值類型!類是默認情況下可以爲null的引用類型。因此,如果A是一個類,那麼'A?'不是有效的。 – JanDotNet

+0

檢查此:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/nullable-types/using-nullable-types – AVEbrahimi

+3

'?.'是空條件運算符,它檢查空值在執行成員訪問操作之前(https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-conditional-operators)。如果左側運算符包含空值,則整個操作停止。 –

回答

0

我假定這是一個錯字A? instance_1=something_maybe_null;,因爲你不能爲空的引用類型(即類),至少在C#6

如果我理解你的意圖正確,如果對象實際上是B的實例,您只是想有條件地調用B中的方法。如果是這樣,那麼你可以這樣做:

class A 
{ 
} 

class B : A 
{ 
    public void SomeMethodInB() { } 
} 

A instance_a = something_maybe_null; 
B instance_b = instance_a as B; 
instance_b?.SomeMethodInB(); 
相關問題