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

c# – 何时使用LINQ的.ToList()或.ToArray()

发布时间:2020-12-15 17:45:17 所属栏目:百科 来源:网络整理
导读:运行此代码后: var input = new ListT( ... );var result = input.Select( t = new U(t) );U first1 = null;foreach ( U u1 in result ) if ( first1 == null ) first1 = u1;U first2 = null;foreach ( U u2 in result ) if ( first2 == null ) first2 = u2
运行此代码后:
var input = new List<T>( ... );
var result = input.Select( t => new U(t) );

U first1 = null;
foreach ( U u1 in result )
    if ( first1 == null )
        first1 = u1;

U first2 = null;
foreach ( U u2 in result )
    if ( first2 == null )
        first2 = u2;

那么’first1 == first2’评估为false,即使这两个U都包含相同的T.我还没有测试过,但我认为可以通过链接.ToList()或.ToArray()来评估为true.进入Select()调用.

在真实的代码中,这比这个简单的例子复杂得多,使用什么是一个很好的经验法则来决定是否附加.ToList()或.ToArray()?我的初始想法是任何可能不止一次迭代的引用表达式,或者在潜在的迭代不明显的情况下更安全,任何引用的表达式的结果永远不会改变.

解决方法

不幸的是,我不认为这里有一个很好的“硬而快”的规则.这取决于您如何期望使用结果,以及查询本身实际执行的方式.

My initial thoughts are either any expression that may be iterated more than once or,to be safer in case potential iterations are not obvious,any expression whose result will never change.

一般来说,如果要多次使用查询结果,通过ToList()或ToArray()存储它总是一个好主意.如果你的LINQ查询是一个“昂贵的”查询是特别的,因为它可以防止昂贵的操作运行不止一次.

通常情况下,如果您仅仅列举结果,那么我将其保留为IEnumerable< T>.如果您打算存储结果,或者多次使用结果,则将其存储在一个集合中是有益的.

另一个要注意的地方是将结果返回公共API.虽然返回IEnumerable< T>通常很好,但是根据预期的使用情况,您可能需要考虑使用ToList()来防止多次执行操作.

至于是否使用ToList()或ToArray(),它真的取决于如何使用结果.与每个相关联的成本几乎相同(如果输入不是ICollection< T>),ToList()实际上具有略低的执行开销.通常,我喜欢ToArray()To ToArray(),除非我有一个特定的需要或渴望一个数组.

(编辑:李大同)

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

    推荐文章
      热点阅读