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

前端之家收集整理的这篇文章主要介绍了c# – 何时使用LINQ的.ToList()或.ToArray()前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
运行此代码后:
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(),除非我有一个特定的需要或渴望一个数组.

猜你在找的C#相关文章