2016-06-13 7 views
3

私は暗黙の変数yesCountを持っています。これは、整数または小数を返す3項演算子で初期化されます。暗黙の変数宣言と三項代入

List<int> simulationsCounters= new List<int>(); 
simulationsCounters.Add(5); 
var yesCount = simulationsCounters.Length > 0 
    ? simulationsCounters[0] 
    : 0m; 

なぜコンパイラは常にyesCountを10進数としてコンパイルしますか? これを推論するのはどのようなプロセスですか?

+2

"いつも" * something *(同じもの)でなければならないので、コンパイラは常にyesCountを小数点としてコンパイルするのですが、 'int'と' decimal'を指定すると、先行ルールは 'decimal' (暗黙的対明示的) –

+0

これらの音声引用は私を深く傷つけました。私はちょうど今のキャリアをあきらめます。ありがとう。 – theIrishUser

答えて

6

真でない整数または小数

を返す三項演算子。三元演算子はのいずれか1つだけを返します。戻り値の型はです。オペレータの第2部分がdecimalを返し、第1部分のintdecimalにキャストされるため、コンパイラはこの戻り値の型をdecimalと推定します。

その演算子の戻り値の型がdecimalであるため、var yesCountdecimalです。

+1

@theIrishUserは実装の詳細を知りませんが、型が異なり、型aが型bに暗黙的にキャスト可能な場合は、型bを選択します。これらの2つの型の間に暗黙の変換がない場合、コンパイラはエラーを発生させます。 –

+0

パーフェクト!ありがとう! – theIrishUser

+1

@theIrishUser申し訳ありませんが、間違ったリンク:https://msdn.microsoft.com/en-us/library/aa691313(v=vs.71).aspx –

2

三項演算子には、整数と小数の2つのオペランドがあります。右手オペランドは、mという接頭辞が付いているので、小数です。つまり、decimalを意味します。

コンパイラは、暗黙のキャストを使用して、出力変数にどの型が最適かを判断できます。 intは暗黙的にdecimalにキャストできますが、それ以外の方法ではキャストできないため、decimalが最適です。 floatdoubleの場合も同様です。 doubleが勝ちます。

+0

ああ、完璧、ありがとう! – theIrishUser

関連する問題