다음 코드는 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와 같은 사람의 이야기를 듣고 싶습니다. –