Partilhar via


SYSLIB0055: AdvSimd.ShiftRightLogicalRoundedNarrowingSaturate* métodos com parâmetros assinados são obsoletos

Os seguintes métodos que aceitam inteiros assinados são obsoletos, começando no .NET 9:

Chamá-los em código gera aviso SYSLIB0055 em tempo de compilação.

Motivo da obsolescência

A instrução Arm Advanced SIMD UQRSHRN executa uma operação estreita saturada não assinada. Como tal, o seu resultado é sempre não assinado. No entanto, as APIs afetadas aceitaram e retornaram tipos assinados, o que significa que não funcionaram como esperado se você seguisse a descrição da API em vez da descrição da instrução. Além disso, a implementação subjacente não pode ser corrigida para executar operações restritas saturadas assinadas e retornar resultados assinados.

Solução

Converta intencionalmente os dados em tipos assinados e chame a sobrecarga não assinada correspondente, por exemplo, AdvSimd.ShiftRightLogicalRoundedNarrowingSaturateUpper(Vector64<UInt32>, Vector128<UInt64>, Byte). Em seguida, converta intencionalmente o resultado em um tipo assinado.

Suprimir um aviso

Se você precisar usar as APIs obsoletas, poderá suprimir o aviso no código ou no arquivo de projeto.

Para suprimir apenas uma única violação, adicione diretivas de pré-processador ao arquivo de origem para desativar e reativar o aviso.

// Disable the warning.
#pragma warning disable SYSLIB0055

// Code that uses obsolete API.
// ...

// Re-enable the warning.
#pragma warning restore SYSLIB0055

Para suprimir todos os SYSLIB0055 avisos em seu projeto, adicione uma <NoWarn> propriedade ao seu arquivo de projeto.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
   ...
   <NoWarn>$(NoWarn);SYSLIB0055</NoWarn>
  </PropertyGroup>
</Project>

Para obter mais informações, consulte Suprimir avisos.