为什么不能在JObject上使用LINQ方法?

ahd*_*ung 5 .net c# linq json.net

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
Run Code Online (Sandbox Code Playgroud)

为什么?谢谢.

mjw*_*lls 8

JObject实现两者IEnumerable<KeyValuePair<string, JToken>>IEnumerable<JToken>(通过继承JContainer).

因此,您不能Select直接使用LINQ(例如),因为它不知道"扩展"的哪些可用枚举.

因此你需要先施展:

((IEnumerable<KeyValuePair<string, JToken>>) jobj).Select(x => x)
Run Code Online (Sandbox Code Playgroud)

要么:

jobj.Cast<KeyValuePair<string, JToken>>().Select(x => x)
Run Code Online (Sandbox Code Playgroud)

或者@Evk指出:

jobj.Select((KeyValuePair<string, JToken> x) => x)
Run Code Online (Sandbox Code Playgroud)