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

如何在foreach循环中对JArray.Children()进行空值检查?

解决方法

方案一:直接用null合并运算符修正类型

你之前的写法无法编译是因为Enumerable.Empty<T>()里的T未和Children()的返回类型匹配,且需确保引入System.Linq命名空间。修改后代码如下:

using System.Linq; // 必须引入该命名空间

JArray jArrayJson = (JArray)token.SelectToken("text");
foreach (JToken item in jArrayJson?.Children() ?? Enumerable.Empty<JToken>())
{
    // 你的业务逻辑
}

当jArrayJson为null时,jArrayJson?.Children()返回null,此时??会将其替换为Enumerable.Empty<JToken>(),foreach会遍历空集合,既不会执行循环体,也不会触发空值报错。

方案二:编写适配IEnumerable<T>的扩展方法

你之前的扩展方法仅针对IList<T>,但JArray.Children()返回的是IEnumerable<JToken>,因此需要修改扩展方法的参数类型:

using System.Collections.Generic;
using System.Linq;

public static class EnumerableExtensions
{
    public static IEnumerable<T> OrEmptyIfNull<T>(this IEnumerable<T> source)
    {
        return source ?? Enumerable.Empty<T>();
    }
}

之后即可直接在代码中使用:

JArray jArrayJson = (JArray)token.SelectToken("text");
foreach (JToken item in jArrayJson?.Children().OrEmptyIfNull())
{
    // 你的业务逻辑
}

这个扩展方法适用于所有IEnumerable<T>类型,通用性更强,不止可用于JArray的Children集合。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 02:24:33