我有两个问题:

问题1背景:
我注意到在Microsoft的LINQ中查看’AsEnumerable()’方法的实现时,它是:

public static IEnumerable<TSource> AsEnumerable<TSource>(this IEnumerable<TSource> source)
{ 
   return source;
}

问题1:
我期待某种铸造或某种东西在这里,但它只是返回它传递的值.这是如何运作的 ?

问题2/3背景:
我一直在努力理解协方差,逆变和不变性.我认为,我有一个模糊的理解,即’in’和’out’关键字确定将子类型分配给父类型时的多态行为.

问题2:
我从阅读中知道IEnumerable是协变的,List是不变的,那么为什么这是不可能的:

List<char> content = "testString".AsEnumerable();

问题3:
如果IList实现了IEnumerable,那么为什么这是不可能的:

IEnumerable<char> content1 = "testString";
IList<char> content2 = content1;

请帮我理解,提前谢谢.

解决方法

>已知输入参数的类型为IEnumerable< TSource>.为什么需要施展任何东西?将对象转换为TSource类型将没有任何效果,因为它们已经保证属于该类型(或更多派生类型).
>您无法指定IEnumerable类型的值< char>到List< char>类型的变量.我想你在这里反思;列表与LT;炭>派生自IEnumerable< char>,而不是相反.这与List< T>无关.不变的. IEnumerable的< T>是协变的(更确切地说,类型参数T是协变的),这给了我们这种情况:
IEnumerable enumerable = Enumerable.Empty<string>(); // Allowed
IEnumerable<string> genericEnumerable = enumerable; // Not allowed

>再次,IList< char>继承自IEnumerable< char>,而不是相反.你可以这样做:

IList<char> content1 = "testString".ToList();
IEnumerable<char> content2 = content1;

你所要求的是没有意义的,我害怕,这与协方差无关. IEnumerable< T>的事实是协变意味着你被允许这样做:

IEnumerable<object> asObject = new List<string>() { "test" };

但是List< T>是不变的,所以你不能这样做:

List<object> asObject = new List<string>() { "test" };

c# – LINQ中AsEnumerable()的内部实现的更多相关文章

  1. 为什么这个OpenGL ES 2.0着色器不能在iOS上使用我的VBO?

    如果有人能够了解这里出了什么问题,也许是对gl命令或其他一些不兼容的命令序列的错误排序,我将非常感谢你的帮助.尽管谷歌在“OpenGLES2.0编程指南”中进行了大量研究和研究,但我一直试图让这段代码整天都没有成功.我正在尝试在iPhone上的OpenGLES2.0中使用顶点缓冲区对象和自定义着色器.我试图交错来自以下类型的一系列自定义结构的顶点数据:位置,半径和颜色字节分别考虑顶点位置,点大小和

  2. ios – 将两个字符串转换为一组布尔值的快速方法是什么?

    我有一个长字符串,我想转换为一个布尔值数组.而且它需要很多次,很快.我天真的尝试是这样的:但这比我想要的要慢很多.我的剖析告诉我,地图是减速的地方,但我不知道我能做多么简单.我觉得如果没有Swift’s/ObjC的开销,这样做会很快.在C中,我认为这是一个简单的循环,其中一个字节的内存与一个常量进行比较,但我不知道我应该看的是什么函数或语法.有更好的办法吗?

  3. 在iOS上默认是char签名还是未签名?

    默认情况下,iOS上是否签名或未签名?(我认为这将是一个很好的回答问题,但奇怪的是谷歌没有任何用处!

  4. ios – 如何创建一个本机显示浮动窗口的ANE

    如何在Xcode中创建本机窗口并将其与MobileFlex应用程序集成.本机窗口应该与StageWebView组件类似,其中本机内容浮动在Flex应用程序的其余部分的矩形区域中.解决方法作为一名灵活的程序员,这是一个繁琐的过程,花了我几个星期才弄明白.希望这将有助于其他一些Xcode新手.首先,您必须对Objective-C和Xcode有基本的了解.您应该能够创建一个简单的HelloWorldXc

  5. Swift基础-0003

  6. Swift中如何转换不同类型的Mutable指针

    在Swift中我们拥有强大高级逻辑抽象能力的同时,低级底层操作被刻意的限制了.但是有些情况下我们仍然想做一些在C语言中的hack工作,下面本猫就带大家看一看如何做这样的事.hackingishappy!!!如上代码我们只要在闭包中返回一个Char指针就可以了,怎么做呢?这就需要借助另一个超级强大的方法unsafeBitCast,该方法将一种类型的变量内容强制转换为另一种,将以上闭包的//???这里不予解释,因为常玩汇编或C的小伙伴肯定早就了然于心鸟!

  7. Mastering Swift: essential details about strings

    https://rainsoft.io/mastering-swift-essential-details-about-strings/MasteringSwift:essentialdetailsaboutstringsDmitriPavlutin|05Oct2016Stringtypeisanimportantcomponentofanyprogramminglanguage.Themostu

  8. NSCharacterSet.characterIsMember()与Swift的字符类型

    想象一下,你有一个Swift的字符类型的实例,你想要确定它是否是一个NSCharacterSet的成员。NSCharacterSet的characterIsMember方法需要一个unichar,所以我们需要从Character到unichar。这可能是因为字符比unichar更通用,所以直接转换不会是安全的,但我只是猜测。我的理解是unichar是一个typealiasUInt16。因此,它不能被转换为单个unichar值,因为它可以由两个unichar组成。您可以通过将字符转换为字符串并使用utf16

  9. string – 如何将“Index”转换为Swift中的“Int”类型?

    尝试读取头文件,但是我找不到Index的类型,尽管它似乎符合使用方法的ForwardindexType协议。任何帮助是赞赏。您需要使用与原始字符串起始索引相关的distanceto方法:您还可以使用一种方法扩展字符串,以返回字符串中第一个出现的字符串,如下所示:Xcode8beta3Swift3

  10. string – 如何在Swift中将“Index”转换为“Int”类型?

    我想将字符串中包含的字母的索引转换为整数值.尝试读取头文件,但我找不到索引的类型,虽然它似乎符合协议ForwardindexType与方法(例如distanceto).任何帮助表示赞赏.您需要使用与原始字符串起始索引相关的distanceto(index)方法:您还可以使用方法扩展String以返回字符串中第一次出现的字符,如下所示:Xcode8Swift3Xcode9Swift4Swift4中另

随机推荐

  1. c# – (wpf)Application.Current.Resources vs FindResource

    所以,我正在使用C#中的WPF创建一个GUI.它看起来像这样:它现在还没有完成.这两行是我尝试制作一种数据表,它们在XAML中是硬编码的.现在,我正在C#中实现添加新的水果按钮功能.我在XAML中有以下样式来控制行的背景图像应该是什么样子:因此,在代码中,我为每列col0,col1和col2创建一个图像,如果我使用以下代码,它添加了一个如下所示的新行:如你所见,它不太正确……为什么一个似乎忽略了一些属性而另一个没有?

  2. c# – 绑定DataGridTemplateColumn

    似乎我已经打了个墙,试图在DataGrid上使用DataTemplates.我想要做的是使用一个模板来显示每个单元格的两行文本.但是似乎无法以任何方式绑定列.以下代码希望显示我想做的事情.注意每个列的绑定:模板列没有这样的东西,因此,这个xaml不可能工作.我注定要将整个DataTemplate复制到每个列,只是对每个副本都有不同的约束?解决方法我不完全确定你想要做什么,但如果您需要获取整行的DataContext,可以使用RelativeSource绑定来移动视觉树.像这样:

  3. c# – 学习设计模式的资源

    最近我来到了这个设计模式的概念,并对此感到非常热情.你能建议一些帮助我深入设计模式的资源吗?

  4. c# – 是否有支持嵌入HTML页面的跨操作系统GUI框架?

    我想开发一个桌面应用程序来使用跨系统,是否有一个GUI框架,允许我为所有3个平台编写一次代码,并具有完全可脚本化的嵌入式Web组件?我需要它有一个API来在应用程序和网页之间进行交流.我知道C#,JavaScript和一些python.解决方法Qt有这样的事情QWebView.

  5. c# – 通过字符串在对象图中查找属性

    我试图使用任意字符串访问嵌套类结构的各个部分.给出以下(设计的)类:我想要从Person对象的一个实例的“PersonsAddress.HousePhone.Number”获取对象.目前我正在使用反思来做一些简单的递归查找,但是我希望有一些忍者有更好的想法.作为参考,这里是我开发的(crappy)方法:解决方法您可以简单地使用标准的.NETDataBinder.EvalMethod,像这样:

  6. c# – 文件下载后更新页面

    FamilyID=0a391abd-25c1-4fc0-919f-b21f31ab88b7&displaylang=en&pf=true它呈现该页面,然后使用以下元刷新标签来实际向用户提供要下载的文件:你可能需要在你的应用程序中做类似的事情.但是,如果您真的有兴趣在文件完全下载后执行某些操作,那么您的运气不佳,因为没有任何事件可以与浏览器进行通信.执行此操作的唯一方法是上传附件时使用的AJAXupload.

  7. c# – 如何在每个机器应用程序中实现单个实例?

    我必须限制我的.net4WPF应用程序,以便每台机器只能运行一次.请注意,我说每个机器,而不是每个会话.我使用一个简单的互斥体实现单实例应用程序,直到现在,但不幸的是,这样一个互斥是每个会话.有没有办法创建机器互连,还是有其他解决方案来实现每个机器应用程序的单个实例?

  8. c# – WCF和多个主机头

    我的雇主网站有多个主机名,都是同一个服务器,我们只是显示不同的皮肤来进行品牌宣传.不幸的是,在这种情况下,WCF似乎不能很好地工作.我试过overridingthedefaulthostwithacustomhostfactory.这不是一个可以接受的解决方案,因为它需要从所有主机工作,而不仅仅是1.我也看过thisblogpost,但是我无法让它工作,或者不是为了解决我的问题.我得到的错误是“这

  9. c# – ASP.NET MVC模型绑定与表单元素名称中的虚线

    我一直在搜索互联网,试图找到一种方式来容纳我的表单元素的破折号到ASP.NET的控制器在MVC2,3或甚至4中的默认模型绑定行为.作为一名前端开发人员,我更喜欢在我的CSS中使用camelCase或下划线进行破折号.在我的标记中,我想要做的是这样的:在控制器中,我会传入一个C#对象,看起来像这样:有没有办法通过一些正则表达式或其他行为来扩展Controller类来适应这种情况?我讨厌这样的事实,我必须这样做:甚至这个:思考?

  10. c# – 用户界面设计工具

    我正在寻找一个用户界面设计工具来显示文档中可能的GUI.我不能生成代码.我知道MicrosoftVisio提供了一个功能.但有什么办法吗?您使用哪种软件可视化GUI?

返回
顶部