Compartilhar via


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

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

Comportamento anterior

Anteriormente, o comportamento ao utilizar a matemática genérica para executar uma mudança em um T pode ser diferente com base no tipo. Em alguns casos, ele mascarou adequadamente a quantidade de deslocamento em sizeof(T) - 1. E em outros casos, não havia mascaramento. Isso significava que a "mudança excessiva" (como a mudança de um byte por 8) poderia resultar em respostas diferentes do esperado.

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 alteração interruptiva

Esta é uma alteração comportamental.

Motivo da alteração

O comportamento difere do comportamento projetado devido a uma diferença na forma 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 utilizados através de operações matemáticas genéricas, o que requer um T restrito a where T : IShiftOperators<T, int, T> ou a uma interface semelhante.