Maksymalna długość liczby całkowitej biginteger
Platforma .NET 9 wymusza maksymalną długość BigInteger, co oznacza, że może zawierać nie więcej niż (2^31) - 1
(około 2,14 miliarda) bitów. Taka liczba reprezentuje prawie 256 MB alokacji i zawiera około 646,5 miliona cyfr. Ten nowy limit gwarantuje, że wszystkie uwidocznione interfejsy API są dobrze zachowywane i spójne, jednocześnie umożliwiając liczby, które wykraczają daleko poza większość scenariuszy użycia.
Poprzednie zachowanie
Wcześniej można było przypisać wartość o długości do Array.MaxLength * 32
bitów do zmiennej BigInteger .
Uwaga
Typowe maszyny osiągną znacznie przed osiągnięciem OutOfMemoryException tego limitu.
Nowe zachowanie
Począwszy od platformy .NET 9, BigInteger ma maksymalną długość (2^31) - 1
(około 2,14 miliarda) bitów. Jeśli spróbujesz przypisać większą wartość, OverflowException element zostanie zgłoszony w czasie wykonywania. Na przykład następujący kod zgłasza wyjątek:
BigInteger bigInt = new BigInteger(-1) << int.MaxValue;
Wprowadzona wersja
.NET 9 (wersja zapoznawcza 6)
Typ zmiany powodującej niezgodność
Ta zmiana jest zmianą behawioralną.
Przyczyna wprowadzenia zmiany
BigInteger program obsługuje reprezentowanie wartości całkowitych o zasadniczo dowolnej długości. Jednak w praktyce długość jest ograniczona przez limity komputera bazowego, takie jak dostępna pamięć lub czas obliczenia danego wyrażenia. Ponadto istnieją pewne interfejsy API, które kończą się niepowodzeniem, biorąc pod uwagę dane wejściowe, które powodują zbyt dużą wartość. Z tych powodów maksymalna długość jest teraz wymuszana.
Zalecana akcja
Jeśli twój kod ma wpływ, zmniejsz długość przypisywanej BigInteger wartości lub dodaj sprawdzanie długości.