Обратите внимание, что "is" и "as" дублируют тест; либо используйте is
, а затем (как только вы знаете) просто разыграйте - или используйте as
в первую очередь и проверьте на null
.
Ре ваша проблема; если вы хотите сделать только одну вещь, тогда разыграйте:
if(arg is MyType2)
{
((MyType2)arg).SomeSpecialMethod();
}
В противном случае - возможно, метод virtual
(на базовом типе) или просто преобразовать логику в другой метод, так что вы получите:
if(arg is MyType2)
{
StuffThatTakesType2((MyType2)arg);
}
Но лично , я бы просто использовал дополнительную переменную:
MyType2 whatever = arg as MyType2;
if(whatever != null) {
whatever.Foo = 123;
whatever.Bar();
}