Spójne zachowanie przesunięcia w ogólnej matematyce
Operacje przesunięcia w matematyce ogólnej teraz zachowują się spójnie we wszystkich wbudowanych typach liczbowych całkowitych.
Poprzednie zachowanie
Zachowanie podczas używania ogólnych operacji matematycznych do wykonania przesunięcia na T
może się różnić w zależności od typu. W niektórych przypadkach odpowiednio maskowała wartość zmiany za pomocą sizeof(T) - 1
. I w innych przypadkach nie było maskowania. Oznaczało to, że "nadmierne przesunięcie" (na przykład przesunięcie byte
o 8) może spowodować inne odpowiedzi niż te oczekiwane.
Nowe zachowanie
Implementacje zostały zaktualizowane, aby odpowiednio zamaskować wartość przesunięcia, zapewniając spójne działanie we wszystkich wbudowanych typach całkowitych oraz zachowanie spójne z dokumentacją interfejsu System.Numerics.IShiftOperators<TSelf,TOther,TResult>.
Wprowadzona wersja
.NET 10 (wersja zapoznawcza 1)
Rodzaj zmiany łamiącej zgodność
Ta zmiana jest zmianą behawioralną.
Przyczyna zmiany
Zachowanie różniło się od zaprojektowanego zachowania ze względu na różnicę w sposobie działania maskowania dla małych typów liczb całkowitych w języku C#.
Zalecana akcja
Zaktualizuj dowolny kod, który opiera się na poprzednim niespójnym zachowaniu, aby upewnić się, że działa z nowym spójnym zachowaniem.
Interfejsy API, których dotyczy problem
operator <<
operator >>
-
operator >>>
dlabyte
,char
,sbyte
,short
iushort
przy użyciu ogólnej matematyki, co wymaga dostosowaniaT
dowhere T : IShiftOperators<T, int, T>
lub podobnego interfejsu.