Freigeben über


Einheitliches Schichtverhalten in generischer Mathematik

Verschiebungsvorgänge in generischer Mathematik verfügen jetzt über ein einheitliches Verhalten für alle integrierten ganzzahligen Typen.

Vorheriges Verhalten

Bisher konnte sich das Verhalten beim Verwenden von generischen Mathematikoperationen, um eine Verschiebung auf ein T durchzuführen, abhängig vom Typ unterscheiden. In einigen Fällen wurde der Verschiebungswert auf angemessene Weise mit sizeof(T) - 1 maskiert. Und in anderen Fällen gab es keine Maskierung. Dies bedeutete, dass eine „Überverschiebung“ (z. B. das Verschieben eines byte um 8 Stellen) zu unerwarteten Ergebnissen führen könnte.

Neues Verhalten

Die Implementierungen wurden aktualisiert, um den Verschiebungsbetrag entsprechend zu maskieren, um ein konsistentes Verhalten für alle integrierten ganzzahligen Typen sicherzustellen und mit dem Verhalten übereinzustimmen, das von der System.Numerics.IShiftOperators<TSelf,TOther,TResult>-Schnittstelle dokumentiert ist.

Eingeführt in Version

.NET 10

Typ des Breaking Changes

Diese Änderung ist eine Verhaltensänderung.

Grund für Änderung

Das Verhalten unterscheidet sich vom entworfenen Verhalten aufgrund eines Unterschieds bei der Funktionsweise der Maskierung für kleine ganzzahlige Typen in C#.

Aktualisieren Sie jeden Code, der auf dem vorherigen inkonsistenten Verhalten basiert, um sicherzustellen, dass er mit dem neuen konsistenten Verhalten funktioniert.

Betroffene APIs

  • operator <<
  • operator >>
  • operator >>> für byte, char, sbyte, short und ushort bei Verwendung mittels generischer Mathematik, die T auf where T : IShiftOperators<T, int, T> oder eine ähnliche Schnittstelle beschränkt erfordert.