Встроенные проверки 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>.IsSupported также может считаться true.

Причина изменения

Предполагалось, что если <Isa>.X64.IsSupportedtrue, то <Isa>.IsSupported также предполагается true. Тем не менее, из-за того, как работает разрешение члена C#, классы, у которых нет вложенного класса X64, это было не всегда, что приводило к ошибкам в пользовательском коде.

При необходимости настройте код, проверяющий IsSupported для поиска соответствующего ISA.

Затронутые API