首页 > 代码库 > C#:关于C#4中IEnumerable<out T>的理解
C#:关于C#4中IEnumerable<out T>的理解
IEnumerable<out T>这个接口非常常见,它是最基础的泛型集合接口,表示可迭代的项的序列。
但是奇怪的是为什么泛型参数要带一个“out”?
经过一番资料查阅后,发现此“out”和C#中的“out”类型参数的“out”并非一个意思。
IEnumerable<out T>中的out表示这个接口支持“协变性”。
何谓“协变性”?
简单的理解就是“T”可以变化为T的基类型。说了这么多,感觉还是很抽象,用一段代码表示吧。
IEnumerable<int> collection1 = new List<string>();IEnumerable<object> collection2 = collection1;
在C#4.0之前,由于IEnumerable<T>的声明并未包含“out”关键字,所以上面的代码是无法通过编译的,编译器会告知你类型转换失败,因为collection2对应的类型为IEnumerable<object>,而collection1对应的类型为IEnumerable<int>。其实这个问题并不是多么深刻,因为现在绝大部分C#开发者用的都是C# 5,就会很“理所当然”的觉得collection1可以转化为collection2。我也是,直至查阅资料研究“out”这个关键字才发现之所以可以实现这样转换的原因。
转载声明:本文转载自http://www.zhoumy.cn/?p=16
C#:关于C#4中IEnumerable<out T>的理解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。