C# 转换为C中的两种类型之一#
如何在C#中转换为两种类型之一 以下是我试图做的:C# 转换为C中的两种类型之一#,c#,type-conversion,null-coalescing-operator,as-operator,C#,Type Conversion,Null Coalescing Operator,As Operator,如何在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); 但我得到了一个错误:
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);
但我得到了一个错误:
运算符“??”不能应用于“Foo”和“Bar”类型的操作数[Assembly CSharp]CSharp(CS0019)
我错过了什么?如果
实例
也是Foo
类型,我希望特定实例
是Foo
类型,或者如果实例
是Bar
类型,则特定实例
应该是Foo
类型。因为,如果instance
不是Foo
,我希望(实例为Foo)
是null
,类型推断的全部要点是可以从初始化表达式推断变量的类型。当初始化表达式应该能够生成两种不同的类型时,如何推断变量的类型?在编译时必须知道变量的类型,因为只有这样才能知道可以编写什么代码来使用它。如果该变量可以是任意一种类型,那么您怎么可能使用该变量编写代码呢?你所缺少的是你试图做的是不可能的
如果要处理这两种类型,则需要编写条件代码,即If语句,以检查一种类型,然后检查另一种类型,并声明每种类型的变量以在两种不同情况下使用。问题是:即使每个
Foo
和每个Bar
都是BaseCl
,没有Foo
是Bar
,反之亦然。那么您的specificInstance
应该能够容纳什么呢<代码>Foo或条
?因为两者都不可能。你必须分别处理这两种情况。或者,直接回答你的开场白:你不能。if(instance是Foo-Foo){/*使用'Foo`*/}否则if(instance是Bar){/*使用'Bar`*/}
想象一下你可以这样做,Foo有一个名为foometry()
的方法,Bar有一个名为BarMethod()
的方法。如果specificInstance
实际上是一个条,那么specificInstance.FooMethod()
会做什么?