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

如何向JObject中动态添加遍历得到的新对象?

正确实现遍历添加属性到JObject的方式

嘿,我懂你遇到的问题了——直接在JObject的初始化器里塞foreach语句肯定行不通,因为C#的对象初始化器只支持表达式,不允许放这种语句类的逻辑。给你两种靠谱的实现方式:

方法1:先初始化基础结构,再循环添加属性

这种方式比较直观,先把固定的JObject结构建好,再找到要添加属性的目标JObject,循环把myObject的内容加进去:

// 先构建基础的JObject结构
JObject grid = new JObject(
    new JProperty("myprop", "value 1"),
    new JProperty("name", new JArray(
        new JObject(
            new JProperty("myprop2", "value 2")
        )
    ))
);

// 找到数组里的那个JObject
var targetObj = (JObject)((JArray)grid["name"])[0];

// 遍历myObject,添加属性
foreach(var value in myObject) {
    targetObj.Add(new JProperty(value.Name, value.Value));
}

方法2:用LINQ表达式嵌入初始化器(更简洁)

如果想在初始化的时候一次性搞定,可以用LINQ把myObject转换成JProperty的集合,然后和原来的固定属性合并,直接传给JObject的构造函数:

JObject grid = new JObject(
    new JProperty("myprop", "value 1"),
    new JProperty("name", new JArray(
        new JObject(
            // 固定属性
            new JProperty("myprop2", "value 2"),
            // 用LINQ把myObject转成JProperty,展开成参数
            myObject.Select(v => new JProperty(v.Name, v.Value)).ToArray()
        )
    ))
);

为啥原来的写法不行?

C#的对象初始化语法(比如new JObject(...))里,括号内只能放表达式,而foreach是一个语句,语法上不允许把语句放在表达式的位置。上面的第二种方法用LINQ的Select把循环逻辑转换成了表达式,所以能直接嵌入初始化器里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:41:10