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#.
Acción recomendada
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 >>>
parabyte
,char
,sbyte
,short
yushort
cuando se usa a través de matemáticas genéricas, lo que requiere unT
restringido awhere T : IShiftOperators<T, int, T>
o una interfaz similar.