运行此代码后:
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'评估为假,即使两个U都包装相同的T。我还没有测试过,但我认为可以通过链接.ToList()或.ToArray()来评估为真到 Select() 调用上。
在实际代码中,这比这个简单的插图要复杂得多,在决定是否应该附加 .ToList() 或 .ToArray() 时,有什么好的经验法则?我最初的想法是任何可能被多次迭代的引用表达式,或者为了更安全,以防潜在的迭代不明显,任何结果永远不会改变的引用表达式。