指定不允许 InlineArray 的显式结构大小

向修饰的结构Size应用显式InlineArrayAttribute是模棱两可的,在类型加载程序中不再受支持。 以前,指定显式 Size 将导致特定于实现的行为,这些行为可能与用户预期不匹配。

引入的版本

.NET 10

以前的行为

以前,允许对修饰Size的结构进行指定InlineArrayAttribute,但导致特定于实现的行为可能与用户期望不匹配。

[InlineArray(8)]
[StructLayout(LayoutKind.Explicit, Size=32)]
struct Int8InlineArray
{
    private int _value;
}

新行为

从 .NET 10 开始,不允许在用Size修饰的结构上指定InlineArrayAttribute。 如果尝试创建此类结构的实例,你将获得一个 TypeLoadException

破坏性变更的类型

此更改可能会影响 二进制兼容性

更改原因

Size 内联数组结构指定是模棱两可的,任何解释都会与规范相矛盾。

在不太可能的情况下,需要为数组元素或整个内联数组指定显式大小,引入一个结构来包装元素类型或整个数组类型。 在包装器的布局中,相应地指定 Size

受影响的 API

  • 类型加载程序