return ステートメントの 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
2 番目の行は両方のゲッターで Int32 を出力すると予想されますが、3 進数の場合、int に対して正しくない CLR 型が返されます。
コードとそれが何をしようとしているのかは気にしないでください-なぜこれが起こっているのか興味があるので、誰かがそれを説明できるなら、私は感謝します.