SYSLIB0055: Los métodos AdvSimd.ShiftRightLogicalRoundedNarrowingSaturate* con parámetros con signo son obsoletos
Los siguientes métodos que aceptan enteros con signo son obsoletos, a partir de .NET 9:
- AdvSimd.Arm64.ShiftRightLogicalRoundedNarrowingSaturateScalar(Vector64<Int64>, Byte)
- AdvSimd.Arm64.ShiftRightLogicalRoundedNarrowingSaturateScalar(Vector64<Int16>, Byte)
- AdvSimd.Arm64.ShiftRightLogicalRoundedNarrowingSaturateScalar(Vector64<Int32>, Byte)
- AdvSimd.ShiftRightLogicalRoundedNarrowingSaturateLower(Vector128<Int16>, Byte)
- AdvSimd.ShiftRightLogicalRoundedNarrowingSaturateLower(Vector128<Int64>, Byte)
- AdvSimd.ShiftRightLogicalRoundedNarrowingSaturateLower(Vector128<Int32>, Byte)
- AdvSimd.ShiftRightLogicalRoundedNarrowingSaturateUpper(Vector64<SByte>, Vector128<Int16>, Byte)
- AdvSimd.ShiftRightLogicalRoundedNarrowingSaturateUpper(Vector64<Int16>, Vector128<Int32>, Byte)
- AdvSimd.ShiftRightLogicalRoundedNarrowingSaturateUpper(Vector64<Int32>, Vector128<Int64>, Byte)
Si se los llama en el código, se genera la advertencia SYSLIB0055
en tiempo de compilación.
Motivo de la obsolescencia
La instrucción Arm Advanced SIMD UQRSHRN
realiza una operación estrecha saturada sin signo. Como tal, su resultado es siempre sin signo. Sin embargo, las API afectadas aceptaban y devolvían tipos con signo, lo que significa que no funcionaban como se esperaba si se seguía la descripción de la API en lugar de la descripción de la instrucción. Además, la implementación subyacente no puede corregirse para realizar operaciones estrechas saturadas con signo y devolver resultados con signo.
Solución alternativa
Convierta intencionadamente los datos a tipos con signo y llame en su lugar a la sobrecarga sin signo correspondiente, por ejemplo, AdvSimd.ShiftRightLogicalRoundedNarrowingSaturateUpper(Vector64<UInt32>, Vector128<UInt64>, Byte). Después, convierta intencionadamente el resultado a un tipo con signo.
Supresión de una advertencia
Si tiene que seguir usando las API obsoletas, puede suprimir la advertencia en el código o en el archivo de proyecto.
Para suprimir solo una infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y luego volver a habilitar la advertencia.
// Disable the warning.
#pragma warning disable SYSLIB0055
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0055
Para suprimir todas las advertencias SYSLIB0055
del proyecto, agregue una propiedad <NoWarn>
al archivo del proyecto.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0055</NoWarn>
</PropertyGroup>
</Project>
Para obtener más información, vea Suprimir advertencias.