比如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,所以就这样了。——爆栈

- EOF -

【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法的更多相关文章

  1. 【手记】走近科学之为什么JObject不能调用LINQ扩展方法

    Json.NET的JObject明明实现了IEnumerable<T>,具体来说是IEnumerable<KeyValuePair<string, JToken>> ...

  2. 走近科学,探究阿里闲鱼团队通过数据提升Flutter体验的真相

    背景 闲鱼客户端的flutter页面已经服务上亿级用户,这个时候Flutter页面的用户体验尤其重要,完善Flutter性能稳定性监控体系,可以及早发现线上性能问题,也可以作为用户体验提升的衡量标准. ...

  3. iOS开发手记 - iOS9.3 UINavigationController添加后不显示storyboard中viewcontroller里的控件的解决方法

    我原先是这么做的,通常也是这么做 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSD ...

  4. .NET手记-定义类和接口的扩展方法

    对于iOS开发者来说,使用扩展方法是家常便饭.因为有很多的类是有系统框架的定义的,我们不能修改或者不想修改他们的源码,但是我们又想要给他添加一些扩展方法来使用.这时定义扩展方法就是很有用的方式了,正如 ...

  5. (数据科学学习手札68)pandas中的categorical类型及应用

    一.简介 categorical是pandas中对应分类变量的一种数据类型,与R中的因子型变量比较相似,例如性别.血型等等用于表征类别的变量都可以用其来表示,本文就将针对categorical的相关内 ...

  6. .NET程序的性能要领和优化建议

    前几天在老赵的博客上看到,Bill Chiles (Roslyn 编译器的Program Manager)写了一篇文章叫做<Essential Performance Facts and .NE ...

  7. CLR via C# 读书笔记---常量、字段、方法和参数

    常量 常量是值从不变化的符号.定义常量符号时,它的值必须能在编译时确定.确定后,编译器将唱两只保存在程序集元数据中.使用const关键字声明常量.由于常量值从不变化,所以常量总是被视为类型定义的一部分 ...

  8. .Net基础

     标题  状态  内容        NET应用程序是如何执行的?    http://www.cnblogs.com/kingmoon/archive/2012/07/16/2594459.html ...

  9. 绝对好文:.NET程序性能的基本要领

    Bill Chiles(Roslyn编译器的程序经理)写了一篇文章<Essential Performance Facts and .NET Framework Tips>,知名博主寒江独 ...

随机推荐

  1. Learning ROS for Robotics Programming Second Edition学习笔记(十) indigo Gazebo rviz slam navigation

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 moveit是书的最后一章,由于对机械臂完全不知,看不懂 ...

  2. 开源项目Git地址

     1.陈明.李建勋.邓覃思   fog-aliyun https://git.oschina.net/dengqinsi/fog-aliyun.git 2.吴俊.骆仲军.袁良福   CDN的H5助 ...

  3. The 11th tip of DB Query Analyzer

          The 11th tip of DB Query Analyzer                                            MA Gen feng       ...

  4. asp.net core中写入自定义中间件

    首先要明确什么是中间件?微软官方解释:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/middleware/?tabs=aspnet ...

  5. python lock, semaphore, event实现线程同步

    lock 机制不管你是java, C#, 还是python都是常用的线程同步机制, 相比较C# 的锁机制, python的加锁显得比较简单, 直接调用threading 标准库的lock 就可以了. ...

  6. IE中调试JS的一款很好的工具

    附件是 IE中调试JS的一款很好用的工具,欢迎下载使用.  具体使用方法为:  1.先安装Companion.JS文件(install.exe).  2.安装Microsoft Script Debu ...

  7. java并发包小结(一)

    java.util.concurrent 包含许多线程安全.高性能的并发构建块.换句话讲,创建 java.util.concurrent 的目的就是要实现 Collection 框架对数据结构所执行的 ...

  8. Hazelcast3.2文档目录翻译

    整理google共享磁盘找到了2014年翻译的Hazelcast官方文档的目录,分享出来可能会对英语不好的同学有些帮助吧. The_Book_of_Hazelcast_r1.2-中文目录 The_Bo ...

  9. P2453 [SDOI2006]最短距离

    题目描述 一种EDIT字母编辑器,它的功能是可以通过不同的变换操作可以把一个源串X [l..m]变换为新的目标串y[1..n].EDIT提供的变换操作有: 源串中的单个字符可被删除(delete): ...

  10. Activex、OLE、COM、OCX、DLL之间有什么区别?

    来源:http://www.blogjava.net/Jack2007/archive/2008/04/27/196392.html         熟悉面向对象编程和网络编程的人一定对ActiveX ...