Преобразование из одного обнуляемого типа в другой обнуляемый тип

Как можно преобразовать из обнуляемого экземпляра класса 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);
}

А если я перееду? в паратезис, он не компилируется:

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

1 ответ

Решение

Я предполагаю, что это опечатка 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();
Другие вопросы по тегам