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循环在控制台上都打印相同的内容。
遍历JArray
和JArray.Children()
有什么区别?
答案 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循环直接对其进行迭代。