强制转换为 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
类型,我希望 specificInstance
是 Foo
类型;如果 instance
是 Bar
类型,我希望它是 Foo
类型Bar
。因为,如果 instance
不是 Foo
,我希望 (instance as Foo)
是 null
。
类型推断的全部意义在于可以从初始化表达式推断出变量的类型。当初始化表达式应该能够产生两种不同的类型时,如何推断变量的类型?变量的类型必须在编译时知道,因为只有这样你才能知道你可以编写什么代码来使用它。如果它可以是任何一种类型,您怎么可能使用该变量编写代码?您缺少的是您尝试做的事情是不可能的。
如果你想处理这两种类型,那么你将需要编写条件代码,即 if 语句,先检查一种类型,然后检查另一种类型,并声明每种类型的变量以用于两种不同的情况。
如何在 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
类型,我希望 specificInstance
是 Foo
类型;如果 instance
是 Bar
类型,我希望它是 Foo
类型Bar
。因为,如果 instance
不是 Foo
,我希望 (instance as Foo)
是 null
。
类型推断的全部意义在于可以从初始化表达式推断出变量的类型。当初始化表达式应该能够产生两种不同的类型时,如何推断变量的类型?变量的类型必须在编译时知道,因为只有这样你才能知道你可以编写什么代码来使用它。如果它可以是任何一种类型,您怎么可能使用该变量编写代码?您缺少的是您尝试做的事情是不可能的。
如果你想处理这两种类型,那么你将需要编写条件代码,即 if 语句,先检查一种类型,然后检查另一种类型,并声明每种类型的变量以用于两种不同的情况。