共用方式為


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 或新增長度檢查的值長度。

受影響的 API