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

C#如何查找数组首个值为null的元素位置并在该位置赋值

C# 查找数组首个null位置并赋值实现方案

首先要注意C#中数组是定长结构,你描述的需求实际分为两种场景,对应实现方式如下:

场景1:仅给已存在的null位置赋值(不需要改变数组长度)

你的示例就属于该场景,直接遍历找到首个null的索引赋值即可,两种实现方式:

基础循环实现(性能最优,无需引入额外命名空间)

// 示例用可空int数组,和你给出的示例结构一致
int?[] a = new int?[7];
a[0] = 0;
a[1] = 1;
a[2] = 2;
a[3] = 3;
// 剩余元素默认值为null

int firstNullIndex = -1;
// 遍历找第一个null的位置
for (int i = 0; i < a.Length; i++)
{
    if (a[i] == null)
    {
        firstNullIndex = i;
        break;
    }
}

if (firstNullIndex != -1)
{
    // 按你的示例赋值为索引值,可替换为任意需要的数值
    a[firstNullIndex] = firstNullIndex;
}
else
{
    // 数组无null元素时的自定义逻辑,比如扩容后赋值
    Array.Resize(ref a, a.Length + 1);
    a[^1] = a.Length - 1;
}

LINQ 简洁实现

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

using System.Linq;

// 查找第一个null索引
int firstNullIndex = a.Select((value, index) => new { value, index })
                      .FirstOrDefault(item => item.value == null)?.index ?? -1;

// 后续赋值逻辑和上面一致

场景2:需要插入新元素(插入后数组长度+1,原位置元素后移)

如果是真·插入操作,不推荐直接用数组实现,优先用List<T>更方便:

List<int?> list = new List<int?> { 0, 1, 2, 3, null, null, null };
// 查找第一个null的索引
int firstNullIndex = list.FindIndex(item => item == null);

if (firstNullIndex != -1)
{
    // 在对应位置插入值,原位置及之后的元素自动后移
    list.Insert(firstNullIndex, 4);
}
else
{
    // 无null则追加到末尾
    list.Add(4);
}

// 需要转回数组的话调用下面的方法
// int?[] a = list.ToArray();

注意事项

  • 非可空值类型数组(比如普通int[])不存在null值,默认值为0,如果要找第一个默认值,把判断条件改为item == default即可
  • Array.Resize本质是生成新数组再拷贝原有元素,频繁调用会有性能损耗,需要频繁增删元素的场景优先用List<T>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:42:02