泛型数学中的一致性移位行为

泛型数学中的 Shift 运算现在在所有内置整数类型中具有一致的行为。

以前的行为

使用通用数学运算对 T 进行移位操作时的行为可能会因类型而异。 在某些情况下,它通过 sizeof(T) - 1适当地屏蔽了移位量。 在其他情况下,没有屏蔽。 这意味着“过度移位”(例如将 byte 移位 8)可能会导致与预期不同的答案。

新行为

这些实现进行了更新,以恰当地屏蔽移位量,从而确保在所有内置整数类型中的行为与 System.Numerics.IShiftOperators<TSelf,TOther,TResult> 接口所记录的行为一致。

引入的版本

.NET 10 预览版 1

破坏性变更的类型

此更改为行为更改

更改原因

此行为不同于设计行为,因为掩码在 C# 中对小整数类型的工作方式有差异。

更新依赖于先前不一致行为的任何代码,以确保它适用于新的一致性行为。

受影响的 API

  • operator <<
  • operator >>
  • operator >>> 适用于 bytecharsbyteshortushort(当通过泛型数学使用时),这需要将 T 约束为 where T : IShiftOperators<T, int, T> 或类似接口。