Compartir a través de


Comportamiento de desplazamiento coherente en matemáticas genéricas

Las operaciones de desplazamiento en matemáticas genéricas ahora tienen un comportamiento coherente en todos los tipos enteros integrados.

Comportamiento anterior

El comportamiento al usar matemáticas genéricas para realizar un cambio en un T podría diferir en función del tipo. En algunos casos, enmascara adecuadamente la cantidad de desplazamiento por sizeof(T) - 1. Y en otros casos, no había enmascaramiento. Esto significaba que el "desplazamiento excesivo" (por ejemplo, cambiar un byte por 8) podría dar lugar a respuestas diferentes de las esperadas.

Nuevo comportamiento

Las implementaciones se actualizaron para enmascarar la cantidad de desplazamiento, según corresponda, para garantizar un comportamiento coherente en todos los tipos enteros integrados y con el comportamiento documentado por la interfaz de System.Numerics.IShiftOperators<TSelf,TOther,TResult>.

Versión introducida

.NET 10 Preview 1

Tipo de cambio importante

Este cambio es un cambio de comportamiento .

Motivo del cambio

El comportamiento difiere del comportamiento diseñado debido a una diferencia en el funcionamiento del enmascaramiento para tipos enteros pequeños en C#.

Actualice cualquier código que se base en el comportamiento incoherente anterior para asegurarse de que funciona con el nuevo comportamiento coherente.

APIs afectadas

  • operator <<
  • operator >>
  • operator >>> para byte, char, sbyte, shorty ushort cuando se usa a través de matemáticas genéricas, lo que requiere un T restringido a where T : IShiftOperators<T, int, T> o una interfaz similar.