Share via


As verificações de IsSupported para tipos intrínsecos de hardware podem ser diferentes em tipos aninhados

A verificação de <Isa>.X64.IsSupported, em que <Isa> se refere às classes no namespace System.Runtime.Intrinsics.X86, agora pode produzir um resultado diferente para as versões anteriores do .NET.

Dica

ISA significa arquitetura padrão do setor.

Versão introduzida

5,0

Descrição das alterações

Nas versões anteriores do .NET, alguns dos tipos intrínsecos de hardware System.Runtime.Intrinsics.X86, por exemplo, System.Runtime.Intrinsics.X86.Aes, não expunham uma classe aninhada X64. Para esses tipos, a chamada de <Isa>.X64.IsSupported era resolvida para uma propriedade IsSupported em uma classe aninhada X64 de uma classe pai <Isa>. Isso significava que a propriedade poderia retornar true mesmo quando <Isa>.IsSupported retornasse false.

No .NET 5 e nas versões posteriores, todos os tipos System.Runtime.Intrinsics.X86 expõem uma classe aninhada X64 que relata o suporte corretamente. Isso garante que a hierarquia geral continue correta e que, se <Isa>.X64.IsSupported for true, <Isa>.IsSupported também poderá ser considerado true.

Motivo da alteração

A intenção era que, se <Isa>.X64.IsSupported fosse true, <Isa>.IsSupported também fosse true implicitamente. No entanto, devido à forma como a resolução de membros funciona em C#, as classes que não tinham uma classe aninhada X64 expunham uma situação em que isso nem sempre ocorria e causava bugs no código do usuário.

Se necessário, ajuste o código que verifica IsSupported para verificar o ISA apropriado.

APIs afetadas