BigInteger 最大長度
.NET 9 會強制執行 的最大長度 BigInteger,也就是它不能包含不超過 (2^31) - 1
(大約 21.4 億個) 位。 這類數位代表幾乎 256 MB 的配置,且包含大約 6.465 億位數。 這項新限制可確保公開的所有 API 都表現良好且一致,同時仍允許遠遠超出大部分使用案例的數位。
先前的行為
先前,您可以將長度高達 Array.MaxLength * 32
位的值指派給 BigInteger 變數。
注意
一般機器在達到此限制之前會達到 OutOfMemoryException 此限制。
新的行為
從 .NET 9 開始, BigInteger 最大長度為 (2^31) - 1
(約 21.4 億個) 位。 如果您嘗試指派較大的值, OverflowException 則會在執行時間擲回 。 例如,下列程式代碼會擲回例外狀況:
BigInteger bigInt = new BigInteger(-1) << int.MaxValue;
導入的版本
.NET 9 Preview 6
中斷性變更的類型
此變更為行為變更。
變更原因
BigInteger 支援表示基本上任意長度的整數值。 不過,實際上,長度受限於基礎計算機的限制,例如可用的記憶體,或計算給定表達式所需的時間。 此外,有一些 API 在給定的輸入導致值太大時失敗。 基於這些原因,現在會強制執行最大長度。
建議的動作
如果您的程式代碼受到影響,請減少您要指派 BigInteger 或新增長度檢查的值長度。