SYSLIB0055: metody AdvSimd.ShiftRightLogicalRoundedNarrowingSaturate* z podpisanymi parametrami są przestarzałe
Następujące metody, które akceptują podpisane liczby całkowite, są przestarzałe, począwszy od platformy .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)
Wywołanie ich w kodzie generuje ostrzeżenie SYSLIB0055
w czasie kompilacji.
Przyczyna obsoletionu
Instrukcja Arm Advanced SIMD UQRSHRN
wykonuje niepodpisane nasyconych wąskich operacji. W związku z tym jego wynik jest zawsze niepodpisany. Jednak interfejsy API, których dotyczy problem, zaakceptowały i zwróciły podpisane typy, co oznacza, że nie działały zgodnie z oczekiwaniami, jeśli postępowano zgodnie z opisem interfejsu API, a nie opisem instrukcji. Ponadto nie można poprawić podstawowej implementacji w celu wykonania podpisanych nasyconych wąskich operacji i zwracania podpisanych wyników.
Rozwiązanie
Celowo przekonwertuj dane na typy podpisane i wywołaj odpowiednie niepodpisane przeciążenie, na przykład AdvSimd.ShiftRightLogicalRoundedNarrowingSaturateUpper(Vector64<UInt32>, Vector128<UInt64>, Byte). Następnie celowo przekonwertuj wynik na typ podpisany.
Pomijanie ostrzeżenia
Jeśli musisz używać przestarzałych interfejsów API, możesz pominąć ostrzeżenie w kodzie lub w pliku projektu.
Aby pominąć tylko jedno naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć ostrzeżenie.
// Disable the warning.
#pragma warning disable SYSLIB0055
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0055
Aby pominąć wszystkie SYSLIB0055
ostrzeżenia w projekcie, dodaj <NoWarn>
właściwość do pliku projektu.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0055</NoWarn>
</PropertyGroup>
</Project>
Aby uzyskać więcej informacji, zobacz Pomijanie ostrzeżeń.