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

C#调用Azure DevOps Rest API跳过null值遍历数据问题咨询

问题根因

程序无报错终止的核心原因是,当某条修订记录未变更System.ChangedDate字段时,接口返回的fields集合中不存在该字段,反序列化后m.fields.SystemChangedDate本身为null,直接访问其newValue属性会触发未捕获的空引用异常,导致程序直接退出,而非逻辑上的停止遍历。

可行解决方案

方案1:使用C#空条件运算符逐层判空(最简单)

利用?.运算符判断每层对象是否为null,只要任意一层为空就会直接返回null,不会触发异常:

var updateid = RestAPI.GetUpdates(id);
Console.WriteLine("Count: " + updateid.count);

foreach (var m in updateid.value)
{
    Console.WriteLine("id: " + m.id);
    Console.WriteLine("rev: " + m.rev);

    // 逐层判空,避免空引用异常
    if (m.fields?.SystemChangedDate?.newValue != null)
    {
        Console.WriteLine("ChangedDate: " + m.fields.SystemChangedDate.newValue);
    }
}

方案2:增加单节点异常捕获(更稳妥)

如果还有其他未知的字段缺失场景,可以给单个循环项的逻辑包裹异常捕获,确保单节点处理失败不会中断整个遍历流程:

var updateid = RestAPI.GetUpdates(id);
Console.WriteLine("Count: " + updateid.count);

foreach (var m in updateid.value)
{
    try
    {
        Console.WriteLine("id: " + m.id);
        Console.WriteLine("rev: " + m.rev);

        string changedDate = m.fields?.SystemChangedDate?.newValue?.ToString();
        if (!string.IsNullOrEmpty(changedDate))
        {
            Console.WriteLine("ChangedDate: " + changedDate);
        }
    }
    catch (Exception ex)
    {
        // 可打印异常信息排查问题,不影响后续节点处理
        Console.WriteLine($"处理rev={m.rev}节点失败:{ex.Message}");
    }
}

方案3:用字典存储fields集合(适配接口特性)

Azure DevOps的更新接口只会返回本次修订发生变更的字段,所以可以把反序列化类中的fields属性修改为Dictionary<string, 你的FieldChange类>类型,通过判断键是否存在来避免访问不存在的字段:

// 先修改WorkItemUpdate类的fields定义
// public Dictionary<string, FieldChange> fields { get; set; }

// 遍历逻辑
foreach (var m in updateid.value)
{
    Console.WriteLine("id: " + m.id);
    Console.WriteLine("rev: " + m.rev);

    if (m.fields != null && m.fields.TryGetValue("System.ChangedDate", out var changeField) && changeField.newValue != null)
    {
        Console.WriteLine("ChangedDate: " + changeField.newValue);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:36:03