SYSLIB0055: i metodi AdvSimd.ShiftRightLogicalRoundedNarrowingSaturate* con parametri con segno sono obsoleti
I metodi seguenti che accettano interi con segno sono obsoleti, con inizio in .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)
La loro chiamata nel codice genera un avviso SYSLIB0055
in fase di compilazione.
Motivo dell'obsolescenza
L'istruzione UQRSHRN
SIMD avanzata ARM esegue un'operazione narrow satura. Pertanto, il suo risultato è sempre senza segno. Tuttavia, le API interessate hanno accettato e hanno restituito tipi con segno, ovvero non hanno funzionato come previsto se è stata seguita la descrizione API al posto della descrizione dell'istruzione. Inoltre, l'implementazione sottostante non può essere corretta per eseguire operazioni narrow sature con segno e restituire risultati con segno.
Soluzione alternativa
Convertire intenzionalmente i dati in tipi con segno e chiamare l'overload senza segno corrispondente, ad esempio AdvSimd.ShiftRightLogicalRoundedNarrowingSaturateUpper(Vector64<UInt32>, Vector128<UInt64>, Byte). Quindi convertire intenzionalmente il risultato in un tipo firmato.
Eliminare un avviso
Se è necessario usare le API obsolete, è possibile eliminare l'avviso nel codice o nel file di progetto.
Per eliminare solo una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare l'avviso.
// Disable the warning.
#pragma warning disable SYSLIB0055
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0055
Per eliminare tutti gli avvisi SYSLIB0055
nel progetto, aggiungere una proprietà <NoWarn>
al file di progetto.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0055</NoWarn>
</PropertyGroup>
</Project>
Per altre informazioni, vedere Non visualizzare gli avvisi.