当我将 if-else 更改为返回语句的三元运算符时,我遇到了一种奇怪的行为。
我在这里简化了代码:
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
我希望第二行在两个 getter 上都输出 Int32,但是对于三元组,我为 int 得到了不正确的 CLR 类型。
别管代码和它试图做什么——我很好奇为什么会这样,所以如果有人能解释一下,我会很感激的。