从一个空类型转换为另一种可空类型

问题描述:

怎么能够从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)。如果左侧运算符包含空值,则整个操作停止。 –

我假定这是一个错字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();