對於巢狀類型,硬體內建的 IsSupported 檢查可能會有所不同。
檢查 <Isa>.X64.IsSupported
,其中 <Isa>
參考 System.Runtime.Intrinsics.X86 命名空間中的類別,現在可能會產生與舊版 .NET 不同的結果。
提示
ISA 代表指令集架構。
引進的版本
5.0
變更描述
在舊版 .NET 中,某些 System.Runtime.Intrinsics.X86 硬體內建型別,例如,System.Runtime.Intrinsics.X86.Aes,並未公開巢狀 X64
類別。 針對這些類型,呼叫 <Isa>.X64.IsSupported
被解析為屬於 <Isa>
父類別中巢狀 X64
類別的 IsSupported
屬性。 這表示即使 <Isa>.IsSupported
傳回 false
,屬性仍可傳回 true
。
在 .NET 5 和更高版本中,所有 System.Runtime.Intrinsics.X86 類型都會公開一個巢狀 X64
類別,以適當報告支援情況。 這可確保一般階層保持正確,而且如果 <Isa>.X64.IsSupported
是 true
,則也可以假設 <Isa>.IsSupported
true
。
變更的原因
它的目的是,如果 <Isa>.X64.IsSupported
是 true
,<Isa>.IsSupported
也暗示為 true
。 不過,由於 C# 中成員解析的運作方式,如果類別中沒有巢狀的 X64
類別,會暴露出某些情況,這在某些情況下並不成立,從而導致使用者程式碼中的錯誤。
建議的動作
如有必要,請調整用於檢查 IsSupported
的程式代碼,以檢查適當的 ISA。
受影響的 API
- System.Runtime.Intrinsics.X86.Aes.X64.IsSupported
- System.Runtime.Intrinsics.X86.Avx.X64.IsSupported
- System.Runtime.Intrinsics.X86.Avx2.X64.IsSupported
- System.Runtime.Intrinsics.X86.Fma.X64.IsSupported
- System.Runtime.Intrinsics.X86.Pclmulqdq.X64.IsSupported
- System.Runtime.Intrinsics.X86.Sse3.X64.IsSupported
- System.Runtime.Intrinsics.X86.Ssse3.X64.IsSupported