嵌套类型的硬件内部 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.IsSupportedtrue,则也可假定 <Isa>.IsSupportedtrue

更改原因

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

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

受影响的 API