Partilhar via


Comportamento de mudança consistente em matemática genérica

As operações de deslocamento em matemática genérica agora têm um comportamento consistente em todos os tipos de inteiros incorporados.

Comportamento anterior

Anteriormente, o comportamento ao utilizar matemática genérica para realizar um deslocamento em um T poderia diferir dependendo do tipo. Em alguns casos, mascarou adequadamente o valor do turno por sizeof(T) - 1. E, em outros casos, não havia máscara. Isso significava que um "overshifting" (como deslocar um byte por 8) poderia resultar em respostas diferentes do que eram esperadas.

Novo comportamento

As implementações foram atualizadas para mascarar a quantidade de deslocamento, conforme apropriado, para garantir um comportamento consistente em todos os tipos inteiros internos e com o comportamento documentado pela interface System.Numerics.IShiftOperators<TSelf,TOther,TResult>.

Versão introduzida

.NET 10

Tipo de mudança de ruptura

Esta mudança é uma alteração comportamental.

Motivo da mudança

O comportamento diferiu do comportamento projetado devido a uma diferença em como o mascaramento funciona para tipos inteiros pequenos em C#.

Atualize qualquer código que dependa do comportamento inconsistente anterior para garantir que ele funcione com o novo comportamento consistente.

APIs afetadas

  • operator <<
  • operator >>
  • operator >>> para byte, char, sbyte, shorte ushort quando usado por meio de matemática genérica, o que requer um T restrito a where T : IShiftOperators<T, int, T> ou uma interface semelhante.