Newtonsoft.Json.Linq.JObject实现了IEnumerable<T>,而不是显式实现,但是为什么不能做到这一点:

using System.Linq;
...
var jobj = new JObject();
var xxx = jobj.Select(x => x); //error
foreach(var x in jobj) { } //no error

为什么?谢谢。

最佳答案

JObject 同时实现IEnumerable<KeyValuePair<string, JToken>>IEnumerable<JToken>(通过从JContainer继承)。

因此,您无法直接使用LINQ(例如Select),因为它不知道要扩展的可枚举数。

因此,您需要先进行转换:

((IEnumerable<KeyValuePair<string, JToken>>) jobj).Select(x => x)

或者:
jobj.Cast<KeyValuePair<string, JToken>>().Select(x => x)

或@Evk指出:
jobj.Select((KeyValuePair<string, JToken> x) => x)

关于c# - 为什么不能在JObject上使用LINQ方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50264693/

10-11 02:11