这个问题与这个有关,但我认为并不完全相同。
鉴于:
class Foo
{
public string Bar { get; set; }
}
...
var c1 = new List<Foo>() { ... };
var c2 = new List<Foo>() { ... };
以下 2 个循环给出相同的结果:
foreach (var item in c2.Where(f => c1.Any(f1 => f1.Bar.Equals(f.Bar))))
{ ... }
foreach (var item in c2.Where(f => c1.Select(f1 => f1.Bar).Contains(f.Bar)))
{ ... }
它们同样快吗?
与另一个问题的不同之处在于,这里的额外语句是否Select
改变了基础集合性质的重要性。
换句话说:这是否包含:
foos.Contains(foo1)
对与此相同的“集合”采取行动:
foos.Select(f=>f.Bar).Contains(foo1.Bar)
我可能的 - 天真 - 想法可能是:“一旦我们落后于 Linq 的 Select,一切都只是'列表',所以 Any 和 Contains 都是 O(n)。”