泛型数学中的 Shift 运算现在在所有内置整数类型中具有一致的行为。
以前的行为
使用通用数学运算对 T 进行移位操作时的行为可能会因类型而异。 在某些情况下,它通过 sizeof(T) - 1适当地屏蔽了移位量。 在其他情况下,没有屏蔽。 这意味着“过度移位”(例如将 byte 移位 8)可能会导致与预期不同的答案。
新行为
这些实现进行了更新,以恰当地屏蔽移位量,从而确保在所有内置整数类型中的行为与 System.Numerics.IShiftOperators<TSelf,TOther,TResult> 接口所记录的行为一致。
引入的版本
.NET 10 预览版 1
破坏性变更的类型
此更改为行为更改。
更改原因
此行为不同于设计行为,因为掩码在 C# 中对小整数类型的工作方式有差异。
建议的操作
更新依赖于先前不一致行为的任何代码,以确保它适用于新的一致性行为。
受影响的 API
operator <<operator >>- 
              
operator >>>适用于byte、char、sbyte、short和ushort(当通过泛型数学使用时),这需要将T约束为where T : IShiftOperators<T, int, T>或类似接口。