Konsekvent skiftbeteende i allmän matematik

Skiftåtgärder i allmän matematik har nu konsekvent beteende för alla inbyggda heltalstyper.

Tidigare beteende

Tidigare kan beteendet vid användning av allmän matematik för att utföra ett skift på en T variera beroende på typ. I vissa fall maskerade den skiftmängden korrekt med sizeof(T) - 1. Och i andra fall fanns det ingen maskering. Detta innebar att "överväxling" (till exempel att flytta en byte med 8) kunde resultera i andra svar än förväntat.

Nytt beteende

Implementeringarna uppdaterades för att maskera skiftningsvärdet, efter behov, för att säkerställa konsekvent beteende för alla inbyggda heltalstyper och följa det beteende som dokumenteras av System.Numerics.IShiftOperators<TSelf,TOther,TResult>-gränssnittet.

Version införd

.NET 10

Typ av brytande ändring

Den här ändringen är en beteendeförändring.

Orsak till ändring

Beteendet skilde sig från det utformade beteendet på grund av en skillnad i hur maskering fungerar för små heltalstyper i C#.

Uppdatera all kod som förlitar sig på det tidigare inkonsekventa beteendet för att säkerställa att den fungerar med det nya konsekventa beteendet.

Berörda API:er

  • operator <<
  • operator >>
  • operator >>> för byte, char, sbyte, shortoch ushort när de används via allmän matematik, vilket kräver en T begränsad till where T : IShiftOperators<T, int, T> eller ett liknande gränssnitt.