以下代碼給出了Main函數中第二行標題中的錯誤。運營商'??'不能應用於子類別的操作數
public class P {}
public class B : P {}
public class A : P {}
void Main()
{
P p = GetA()??GetB();
}
public A GetA()
{
return new A();
}
public B GetB()
{
return new B();
}
一個簡單的調整,以這樣的
p = (P)GetA()??GetB();
or
p = GetA()??(P)GetB();
的作品就行了。
我很好奇爲什麼編譯器不明白,這兩個都是左側容器的子類,並允許沒有轉換的操作?
啊我明白了,我是在寫一個非常複雜的評論的過程中,當我重讀你的榜樣,並意識到LHS的類型源自對RHS表達的評估。最初,我認爲只要'x'和'y'都可以轉換爲'a',那麼它就很好! – Joe
是的,包括被分配給變量的類型是最直接的方式,以及我最初以爲它會起作用。我很想聽到像Eric Lippert這樣的人爲什麼這樣設計。 –