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

如何获取`ReadOnlyArray<InputDevice>?`类型变量的首个数组元素

解决方案

报错根因

  • 直接写test[0]报错:ReadOnlyArray<InputDevice>?是可空值类型,索引器属于内部封装的ReadOnlyArray<InputDevice>实例,必须先拆包拿到实际数组实例才能使用索引操作。
  • 写test.GetValueOrDefault()[0]报越界:当可空对象为null时,GetValueOrDefault会返回默认构造的空ReadOnlyArray实例,它的长度为0,访问索引0自然触发参数越界;就算可空对象有值,也存在数组本身为空的可能,直接访问索引同样会报错。

正确写法

写法1 无额外依赖(推荐)

不需要引入其他命名空间,兼容所有C#版本:

InputDevice firstDevice = null;
// 先判断可空对象是否有值,再判断数组内是否存在元素
if (test.HasValue && test.Value.Count > 0)
{
    firstDevice = test.Value[0];
}
// 后续使用firstDevice前先判空即可

如果项目使用C# 8及以上版本,还可以用空条件运算符简化:

// test为null时直接返回null,不会触发空引用异常
// 注意:该写法仍需保证数组非空,否则还是会触发越界异常
InputDevice? firstDevice = test?[0];

写法2 用Linq简化代码

需要先引入System.Linq命名空间:

using System.Linq;

// 空值或者数组为空时都返回null,无需额外写判断逻辑
InputDevice firstDevice = test.HasValue ? test.Value.FirstOrDefault() : null;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 15:36:07