加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – LINQ IEnumerable内存结构

发布时间:2020-12-15 23:38:57 所属栏目:百科 来源:网络整理
导读:所以我理解C#中最常见的集合都实现了IEnumerable T interface:List T,T []和Dictionary TKey,TVal都这样做. 但是,当您运行LINQ查询时,例如: myCol.Where(myBoolMethod); 您将返回数据作为实现IEnumerable T的未知类型. 因此,我想知道这些数据是如何实际存
所以我理解C#中最常见的集合都实现了IEnumerable< T> interface:List< T>,T []和Dictionary< TKey,TVal>都这样做.

但是,当您运行LINQ查询时,例如:

myCol.Where(myBoolMethod);

您将返回数据作为实现IEnumerable< T>的未知类型.

因此,我想知道这些数据是如何实际存储的,直到通过.ToList(),. ToArray()等将其转换为更有用的格式.

它是否仍然属于源类型?它是否存储在伪数组中?它是上述某种组合吗?

除此之外,还有任何理由可以转换为一种类型的IEnumerable< T>.总是比转换到另一个更快 – 即myCol.Where(myBoolMethod).ToArray()总是比myCol.Where(myBoolMethod).ToList()更快,无论涉及哪种数据类型?

解决方法

它没有存储.它表示在稍后的时间点获取数据的能力,但数据本身仍然潜伏在组成 linq查询的原始集合中. (以及从表达式创建新值的任何逻辑)

这就是为什么在没有使用ToXxx方法的情况下存在各种警告来反对存储这些结果,如果你有可能实际上导致查询多次执行.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读