次の方法で共有


ハードウェアに組み込みの 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>.IsSupportedfalse が返されるときでも、このプロパティで true が返される可能性を意味しました。

.NET 5 以降のバージョンでは、すべての System.Runtime.Intrinsics.X86 型で、サポートを適宜報告する入れ子 X64 クラスが公開されます。 これにより、一般階層が正しく維持され、<Isa>.X64.IsSupportedtrue の場合、<Isa>.IsSupportedtrue になると想定できます。

変更理由

<Isa>.X64.IsSupportedtrue の場合、<Isa>.IsSupported も暗黙的に true になることが意図されていました。 しかしながら、C# におけるメンバー解決のしくみに起因し、入れ子 X64 クラスが与えられていないクラスでは意図どおりになるとは限らず、ユーザー コードでバグが見つかる状況が発生しました。

必要に応じて、該当する ISA がないか確認するよう、IsSupported をチェックするコードを調整します。

影響を受ける API