【手记】走近科学之为什么JObject不能调用LINQ扩展方法
2024-09-08 10:11:48
Json.NET的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) { } //可以 var xxx = ((IEnumerable<KeyValuePair<string, JTokin>>)jobj).Select(x=>x); //也可以
究竟是人性的扭曲还是道德的沦丧?答案就在:
因为JObject除了本身实现了一个IEnumerable<KeyValuePair<string, JToken>>,它实现的另一个接口JContainer也实现了一个IEnumerable<JToken>,等于JObject直接和间接实现了两个不同的IEnumerable<T>,当.Select的时候编译器不能确定调用哪个类型的Select,所以就这样了。——爆栈
最新文章
- ssh链接数设置问题
- IO调度器(二) IO的中断返回
- unresolved refrence &#39;execfile&#39;……
- 3,SFDC 管理员篇 - 区域划分
- SqlServer2008R2附件数据库失败
- thinkphp 3.23 第三方登录sdk集成包
- (转)Sqlite中INTEGER PRIMARY KEY AUTOINCREMENT和rowid的使用
- SQL操作(增删改查)
- [zz]npm安装错误解决方法
- cocos2dx 随机函数
- TeamTalk安装测试
- 7系列高速收发器总结 GTP IP核使用篇
- Python之面向对象三
- 文本处理三剑客之awk(No.1)
- Error: listen EADDRINUSE :::3000
- [python]目录及文件操作
- Plugin with id &#39;com.novoda.bintray-release&#39; not found.的解决方案
- JS event loop
- UINavigationController与UITabBarController相关问题
- OpenCV---图像直方图