泛型數學中的一致移位行為
在泛型數學中的位移運算現在在所有內建整數類型上都有一致的行為。
先前的行為
使用泛型數學對 T
執行移位操作時,其行為可能會隨著資料類型而有所不同。 在某些情況下,它會適當地以 sizeof(T) - 1
遮罩移位量。 在其他情況下,沒有遮罩。 這意味著“過度轉移”(如將 byte
移位到 8)可能會導致與預期的答案不同。
新行為
實作已更新,以適當地遮蔽移位量,以確保所有內建整數類型以及 System.Numerics.IShiftOperators<TSelf,TOther,TResult> 介面所記載的行為一致。
引進的版本
.NET 10 Preview 1
破壞性變更類型
這項變更是 行為上的改變。
變更的原因
行為與設計的預期行為不同,是因為在 C# 中,遮罩對小型整數類型的運作方式存在差異。
建議的動作
更新依賴先前不一致行為的任何程序代碼,以確保其能與新的一致行為搭配運作。
受影響的 API
operator <<
operator >>
-
operator >>>
用於透過泛型數學操作的byte
、char
、sbyte
、short
和ushort
,這需要T
被限制於where T : IShiftOperators<T, int, T>
或類似的介面。