return 문에 대해 if-else를 3 진 연산자로 변경했을 때 이상한 동작이 나타났습니다.3 진 연산자에서 예기치 않은 동작이 발생했습니다.
class Foo
{
private bool condition;
private int intValue = 1;
private decimal decimalValue = 1M;
public object TernaryGet
{
get
{
return condition ? decimalValue : intValue;
}
}
public object IfElseGet
{
get
{
if (condition)
return decimalValue;
return intValue;
}
}
public Foo(bool condition)
{
this.condition = condition;
}
}
class Program
{
static void Main(string[] args)
{
var fooTrue = new Foo(true);
var fooFalse = new Foo(false);
Console.WriteLine("{0}, {1}", fooTrue.TernaryGet.GetType(), fooTrue.IfElseGet.GetType());
Console.WriteLine("{0}, {1}", fooFalse.TernaryGet.GetType(), fooFalse.IfElseGet.GetType());
}
}
이의 출력은 다음과 같습니다 : 내가 여기에 코드를 단순화했습니다
System.Decimal, System.Decimal
System.Decimal, System.Int32
내가하지만 삼항에 대한 두 게터에 출력 INT32 두 번째 행을 기대 int에 대해 잘못된 CLR 유형이 다시 나타납니다.
코드와 그게 무엇을하려고하는지 신경 쓰지 마세요. 왜 이런 일이 일어나고 있는지 궁금 해서요. 누구든지 설명 할 수 있다면, 고맙겠습니다. result
의
var result = condition ? decimalValue : intValue;
유형이 컴파일시에 정적으로 알려진해야합니다 옵션 중 하나/모두 일반적인 유형으로 주조되어 - 원 (조건부) 연산자의
좋은 답변 감사합니다. ReSharper는 3 진으로 바꿀 것을 제안 했으므로 나는 그다지 생각하지 않았습니다. 그래도 가장자리의 경우가 조금 있습니다. 올바른 CLR 형식을 원했던 이유는 MVC 뷰에서 각 형식에 대해 편집기 템플릿과 함께 사용하기 위해서였습니다 –