遍历JArray和JArray.Children()之间的区别

时间:2019-08-31 18:47:01

标签: c# json.net

var jarr = new JArray{new JObject{{"a", "1"}}, new JObject{{"b", "2"}}, new JObject{{"c", "3"}}};

foreach (var item in jarr)
{
    Console.WriteLine(item);
}

foreach (var item in jarr.Children())
{
    Console.WriteLine(item);
}

两个foreach循环在控制台上都打印相同的内容。 遍历JArrayJArray.Children()有什么区别?

1 个答案:

答案 0 :(得分:1)

没有区别,您可以看到相关的source code here

GetEnumerator的{​​{1}}方法(将由foreach循环调用)只是返回其JArray的枚举数(在第327行附近):

Children

/// <summary> /// Returns an enumerator that iterates through the collection. /// </summary> /// <returns> /// A <see cref="IEnumerator{T}"/> of <see cref="JToken"/> that can be used to iterate through the collection. /// </returns> public IEnumerator<JToken> GetEnumerator() { return Children().GetEnumerator(); } 上进行迭代的两种方式都存在的原因是,JArray是在Children中声明的,因此它的所有子类都必须具有它。 JToken实现JArray也是有意义的,这意味着它也实现了IList<JToken>,允许您使用foreach循环直接对其进行迭代。