JObject为什么不能调用linq方法?
Newtonsoft.Json.Linq.JObject
明明实现了IEnumerable<T>
,具体来说是IEnumerable<KeyValuePair<string, JToken>>
,看了元数据和源码,也不是显式实现的,那按说JObject
类型的对象是可以直接调用Select、Where
等linq扩展方法的,但偏偏就是不行,代码如下:
using System.Linq;
...
var jobj = new JObject();
var xxx = jobj.Select(x=>x); //报错:JObject未包含Select定义,也不存在第1个参数为JObject的Select扩展方法...
foreach(var x in jobj) { } //可以
实在不知道什么道理,求指点迷津。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在爆栈问到原因了,是因为
JObject
除了本身实现了一个IEnumerable<KeyValuePair<string, JToken>>
,它实现的另一个接口JContainer
也实现了一个IEnumerable<JToken>
,等于JObject
直接和间接实现了两个不同的IEnumerable<T>
,当.Select
的时候编译器不能确定调用哪个类型的Select
,所以就这样了。可以将
jobj
显式转换为IEnumerable<XXX>
后调用。