4


1

C#割り当ての質問

次のスニペットでは:

long frameRate = (long)(_frameCounter / this._stopwatch.Elapsed.TotalSeconds);

割り当て演算子の右側に追加の(長い)(…​)があるのはなぜですか?

4 Answer


4


除算は倍精度浮動小数点値を作成し( TimeSpan.TotalSeconds`は double`であるため)、キャストは結果値を浮動小数点ではなく整数に切り捨てます。 最終的には、1秒あたりの断片的なフレーム数を使用した正確な回答ではなく、1秒あたりのフレーム数は概数ですが、整数になります。

`frameRate`が表示またはロギングに使用される場合、キャストは出力をより見栄え良くするためだけの場合があります。


2


除算の結果を「long」に変換する明示的な変換(キャスト)です。

参照:http://msdn.microsoft.com/en-us/library/ms173105.aspx [キャストと型変換]


0


計算の結果は、使用されている変数のタイプに関連しているためです。 コンパイラーは、実行されている型のために結果の型が「long」ではないと判断した場合、結果をキャストする必要があります。

結果をキャストすると、精度や値が失われる可能性があることに注意してください。 括弧付きキャスト `(long)`は明示的なキャストであり、たとえば、 "1.234"を "long"に格納しようとしてもエラーは生成されません。


0


私の意見では、いくつかの理由が考えられます。

  1. 式の少なくとも1つの型が整数型ではありません(私は考えていません so).

  2. 開発者は、結果が「long」型であることを強調したかった( 読者にとって明確な結果タイプ-正当な理由)。

  3. 開発者は表現の結果が何であるか確信が持てず、 それが「長い」ことを確認してください(それが機能することを期待して、確認する方が良いです)。

3つだったと思う:)。