嵌套类型的硬件内部 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 解析为父类 IsSupported 的嵌套 X64 类上的 <Isa> 属性。 这意味着,属性可能返回 true,即使 <Isa>.IsSupported 返回 false

在 .NET 5 及更高版本中,所有的 System.Runtime.Intrinsics.X86 类型都公开一个嵌套的 X64 类,用于适当报告支持情况。 这可确保常规层次结构保持不变,如果 <Isa>.X64.IsSupportedtrue,则也可以假定 <Isa>.IsSupportedtrue

更改原因

它的目的是,如果 <Isa>.X64.IsSupportedtrue<Isa>.IsSupported 也暗示 true。 但是,由于成员解析在 C# 中的工作方式,没有嵌套的 X64 类的类会导致并不总是这种结果且用户代码中会出现 bug。

如有必要,请调整检查 IsSupported 的代码,以检查相应的 ISA。

受影响的 API