在TimeSpan类中玩了一下,我开始想知道为什么timepan类的属性都是int32s?
我理解为什么构造函数在创建时间跨度时会使用int32,但是如果你查看MSDN文档,它会说明:
"当前TimeSpan结构的小时组件。回报 值范围从-23到23。"
并且该属性看起来像这样
public int Hours {get; }
我的第一个本能认为我是在与TimeSpan.TotalHours分享某种数据,但那是双倍的。
有没有理由认为这是一个int32而不是我完全忽略的int8?或者我错过了结构中的隐藏功能吗?
答案 0 :(得分:2)
处理32位整数与处理较小的精度(例如Int16或字节)在性能方面没有区别。
所以这里的一致性比在这里和那里保存几个字节更重要。
另一个可能出现的问题是,当你尝试在较小的整数上运行操作(加法,乘法)时,你冒着溢出的风险,或者你必须转换为更大的整数。
答案 1 :(得分:1)
int8(a.k.a。SByte):
此API不符合CLS。符合CLS的替代方案是Int16。
如果他们决定在框架内的核心类库中公开非CLS兼容类型,那将是不寻常的。所以int8
肯定是错误的选择。然后,正如@Aliostad所说,事实是在实际操作期间,较短的积分值往往被视为完整的32位值 - 因此使用较小的类型没有性能优势。