我以为我知道一切,IEnumerable<T>
但我刚遇到一个我无法解释的案例.当我们调用.在一个linq方法上IEnumerable
,执行被推迟到对象被枚举,不是吗?
那么如何解释下面的示例:
public class CTest
{
public CTest(int amount)
{
Amount = amount;
}
public int Amount { get; set; }
public override string ToString()
{
return $"Amount:{Amount}";
}
public static IEnumerable<CTest> GenerateEnumerableTest()
{
var tab = new List<int> { 2, 5, 10, 12 };
return tab.Select(t => new CTest(t));
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止没什么不好的!但是下面的测试给了我一个意想不到的结果,虽然我的知识IEnumerable<T>
和.Where
linq方法:
[TestMethod]
public void TestCSharp()
{
var tab = CTest.GenerateEnumerableTest();
foreach (var item in tab.Where(i => i.Amount > 6))
{ …
Run Code Online (Sandbox Code Playgroud)