You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优雅获取C# 12中Inline Array(内联数组)的长度?

C# 12 内联数组获取长度的优雅实现方式

C# 12 的内联数组示例代码如下:

[System.Runtime.CompilerServices.InlineArray(10)]
public struct Buffer
{
    private object element;
}

创建实例后:

Buffer a = new();

原本预期会有a.Size或a.Length这类属性,但实际并未提供。目前可通过((ReadOnlySpan<object>)a).Length获取长度,有没有更优雅的实现方式?


方案1:直接在结构体中添加硬编码的Length属性

内联数组的长度是编译期固定的(由InlineArray特性的参数指定),直接在结构体里手动实现Length属性是最直观、性能最优的方式:

[System.Runtime.CompilerServices.InlineArray(10)]
public struct Buffer
{
    private object element;

    public int Length => 10;
}

之后就可以直接通过a.Length获取长度,完全不需要转换Span,没有任何额外性能开销。

方案2:借助Unsafe类自动计算长度

如果不想硬编码长度值,避免后续修改InlineArray参数时忘记同步Length,可以利用System.Runtime.CompilerServices.Unsafe类,根据内联数组的内存布局计算长度:

using System.Runtime.CompilerServices;

[InlineArray(10)]
public struct Buffer
{
    private object element;

    public int Length => Unsafe.SizeOf<Buffer>() / Unsafe.SizeOf<object>();
}

这种方式依赖内联数组元素连续且大小一致的固有内存特性,是安全可靠的,且能自动跟随InlineArray的参数变化。


内容的提问来源于stack exchange,提问作者MarkusParker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 05:29:54