XmlWriter writer = XmlWriter.Create(
(string.IsNullOrEmpty(outfile) ? Console.Out : outfile)
);
그러나 컴파일 할 때 'System.IO.TextWriter'와 'string'사이에 암시적인 변환이 없기 때문에 "조건식의 유형을 결정할 수 없다. ''. 위의 코드는 다음을 단순화 한 것입니다.
XmlWriter writer;
if (string.IsNullOrEmpty(outfile))
{
writer = XmlWriter.Create(Console.Out); // Constructor takes TextWriter
}
else
{
writer = XmlWriter.Create(outfile); // Constructor takes string
}
이 두 Create
호출은 완벽하게 유효하며 컴파일됩니다. 인라인 테스트를 할 때처럼 컴팩트하게 만드는 방법이 있습니까?
내가 원하는 것은 효과가 없다는 것은 나에게 의미가 없습니다. 정신적으로 이것을 생각해 보면 컴파일러가 어떤 케이스를 결정할 지 string.IsNullOrEmpty(outfile)
를 평가하는 것처럼 보입니다 :
- 조건이 참이라면
Console.Out
과 함께 가고 다형성으로 버전을 선택해야합니다. TextWriter를 사용하는XmlWriter.Create
- 조건이 false 인 경우
outfile
과 함께 실행 한 다음 문자열을 사용하는XmlWriter.Create
의 버전을 다형성으로 선택해야합니다.
ML로 프로그래밍하면 내 뇌가 휘어 졌습니까?
컴파일러는 컴파일시 클래스/메소드 이름과 인수를 선택하지만 런타임에 callvirt IL 명령어를 통해 해당 메소드의 구현을 다형 적으로 선택합니다. –