【发布时间】:2021-08-11 07:33:59
【问题描述】:
如何在 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);
但我收到一个错误:
运算符'??'不能应用于“Foo”和“Bar”类型的操作数 [Assembly-CSharp] csharp(CS0019)
我在这里缺少什么?如果instance 也是Foo 类型,我希望specificInstance 是Foo 类型,或者如果instance 是Bar 类型是Bar。因为,如果 instance 不是 Foo 我希望 (instance as Foo) 是 null。
【问题讨论】:
-
问题是:即使每个
Foo和每个Bar都是BaseCl,noFoo曾经是Bar,反之亦然。那么您的specificInstance应该能够持有什么?Foo还是Bar?因为 both 是不可能的。您必须分别处理这两种情况。或者,直接回答您的开场问题:您不能。 -
if (instance is Foo foo) { /* Use `foo` */ } else if (instance is Bar bar) { /* Use `bar` */ } -
想象一下你可以做到这一点,而 Foo 有一个名为
FooMethod()的方法,而 Bar 有一个名为BarMethod()的方法。如果specificInstance实际上是Bar,你会期望specificInstance.FooMethod()做什么?
标签: c# type-conversion null-coalescing-operator as-operator