C#分配问题

时间:2010-09-20 07:44:51

标签: c# operators variable-assignment

在以下代码段中:

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

为什么赋值运算符右边还有一个(长)(...)?

4 个答案:

答案 0 :(得分:4)

除法创建双精度浮点值(因为TimeSpan.TotalSecondsdouble),因此强制转换将结果值截断为积分而不是浮点。你得到一个近似但整数帧的每秒,而不是每秒小数帧的精确答案。

如果frameRate用于显示或记录,则强制转换可能只是为了使输出看起来更好。

答案 1 :(得分:2)

这是一个显式转换(强制转换),可将除法运算的结果转换为long

请参阅:Casting and Type Conversions

答案 2 :(得分:0)

因为计算结果与正在使用的变量的类型有关。如果编译器认为结果类型不是long,因为要对其进行操作,那么您需要转换结果。

请注意,投射结果可能会导致精度或值丢失。括号内的演员(long)是一个明确的演员,如果您试图将“1.234”放入long,只能存储“1”,则不会产生任何错误。

答案 3 :(得分:0)

在我看来,可能有几个原因:

  1. 表达式中至少有一个类型不是整数类型(我不这么认为)。
  2. 开发人员希望突出显示结果为long类型(使读者明白结果类型 - 很有道理)。
  3. 开发人员不确定表达式的结果是什么,并希望确保它是long(最好确保,希望,它会起作用)。
  4. 我相信它是3:)。