【问题标题】:Timespan.Hour, returns from the range of -23 to 23 why is it a int32?Timespan.Hour,从-23到23的范围内返回,为什么是int32?
【发布时间】:2012-03-23 18:55:38
【问题描述】:

在玩了一下 TimeSpan 类,我开始想知道为什么时间跨度类的属性都是 int32s?

我理解为什么构造函数在创建时间跨度时采用 int32,但如果您查看 MSDN 文档,它会指出:

"当前TimeSpan结构的小时分量。返回 值范围从 -23 到 23。”

并且该属性看起来像这样

公共 int 小时 { 获取; }

我的第一个直觉是它正在与 TimeSpan.TotalHours 共享某种数据,但这是双倍的。

这是我完全忽略的 int32 而不是 int8 的原因吗?还是我错过了结构中的一些隐藏功能?

【问题讨论】:

  • 可能是因为Int32 是高度编译器优化的。

标签: .net design-patterns struct


【解决方案1】:

就性能而言,处理 32 位整数与处理较小精度(例如 Int16 或字节)没有什么不同。

所以这里的一致性比在这里和那里保存几个字节更重要。

另一个可能出现的问题是,当您尝试对较小的整数(加法、乘法)运行运算时,您会冒溢出的风险,或者您必须转换为更大的整数。

【讨论】:

    【解决方案2】:

    int8(又名SByte):

    此 API 不符合 CLS。符合 CLS 的替代方案是 Int16。

    如果他们决定在框架内的核心类库中公开不符合 CLS 的类型,那将是不寻常的。所以int8 肯定是错误的选择。然后,正如@Aliostad 所说,事实是,在实际操作期间,较短的整数值往往被视为完整的 32 位值 - 因此使用较小的类型没有性能优势。

    【讨论】:

      猜你喜欢
      • 2021-09-21
      • 2013-05-18
      • 1970-01-01
      • 1970-01-01
      • 2021-11-04
      • 1970-01-01
      • 2020-06-24
      • 1970-01-01
      相关资源
      最近更新 更多