强制转换为 C# 中的两种类型之一

Cast to one of two types in C#

如何在 C# 中强制转换为两种类型之一?

这是我正在尝试做的事情:

public class BaseCl {}
public class Foo : BaseCl {}
public class Bar : BaseCl {}

BaseCl instance;
... some code which puts a value in the `instance`
var specificInstance = (instance as Foo) ?? (instance as Bar);

但是我得到一个错误:

Operator '??' cannot be applied to operands of type 'Foo' and 'Bar' [Assembly-CSharp] csharp(CS0019)

我在这里错过了什么?如果 instance 也是 Foo 类型,我希望 specificInstanceFoo 类型;如果 instanceBar 类型,我希望它是 Foo 类型Bar。因为,如果 instance 不是 Foo,我希望 (instance as Foo)null

类型推断的全部意义在于可以从初始化表达式推断出变量的类型。当初始化表达式应该能够产生两种不同的类型时,如何推断变量的类型?变量的类型必须在编译时知道,因为只有这样你才能知道你可以编写什么代码来使用它。如果它可以是任何一种类型,您怎么可能使用该变量编写代码?您缺少的是您尝试做的事情是不可能的。

如果你想处理这两种类型,那么你将需要编写条件代码,即 if 语句,先检查一种类型,然后检查另一种类型,并声明每种类型的变量以用于两种不同的情况。