次のコードは、Main関数の2行目のタイトルのエラーを示しています。オペレータ '??'子クラスの型のオペランドには適用できません
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
ええ、割り当てられる変数のタイプを含めて、最も直接的な方法であり、私はそれが最初にうまくいくと思いました。このように設計された理由については、エリック・リッペルトのような人から聞いてみたいと思います。 –