Linq源代码阅读

Posted 聪明大熊的技术园地

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linq源代码阅读相关的知识,希望对你有一定的参考价值。

在 System.Core

dotnet451\source\ndp\fx\src\core\system\linq\enumerable.cs

 

Where 和 Select 内 ,把数组和List分开,没看明白为什么这么做

if (source is Iterator<TSource>) return ((Iterator<TSource>)source).Where(predicate);
if (source is TSource[]) return new WhereArrayIterator<TSource>((TSource[])source, predicate);
if (source is List<TSource>) return new WhereListIterator<TSource>((List<TSource>)source, predicate);

----------------------

Union,Intersect,Except,Distinct 防止重复 用Set,类似HashSet一个内部使用的,没明白为什么不用Hashset,可能是为了简化?

HashSet类似用字典,但是只有Key,没有Value

Union,联合,A + B, 加后元素都不会重复。

Intersect  交集, A和B共同有的, A如果本来有重复的元素,也只取一个,

  Join A B类型不同,Intersect类型相同

Except 差集,A有 B没有的元素 ,A如果本来有重复的元素,也只取一个

 

-------------------

SequenceEqual 两个序列元素比较,长度也要一样

AsEnumerable 没有任何意义

 IEnumerable<TResult> OfType<TResult>(this IEnumerable source)  只返回source里 TResult类型的。

OfType 用的is type ,Cast用的(TResult)type ,可能转 double 到int适合Cast

----------------------------------------

Join以前看过,排序和分组的没仔细看。

 

以上是关于Linq源代码阅读的主要内容,如果未能解决你的问题,请参考以下文章

LINQ中ForEach方法的使用

LINQ to OBJECT函数积累

自动编译 Linq 查询

LINQ 读取 XML 字符串并放入变量

使用 MS Access 中的 Linq 填充 ComboBox

使用 LINQ XML 绑定 ComboBox