Udostępnij za pośrednictwem


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#.

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 >>> dla byte, char, sbyte, shorti ushort przy użyciu ogólnej matematyki, co wymaga dostosowania T do where T : IShiftOperators<T, int, T> lub podobnego interfejsu.