小编Fab*_*rie的帖子

IEnumerable <T>和.Where Linq方法的行为?

我以为我知道一切,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>.Wherelinq方法:

[TestMethod]
public void TestCSharp()
{
    var tab = CTest.GenerateEnumerableTest();

    foreach (var item in tab.Where(i => i.Amount > 6))
    { …
Run Code Online (Sandbox Code Playgroud)

c# linq ienumerable

9
推荐指数
2
解决办法
242
查看次数

标签 统计

c# ×1

ienumerable ×1

linq ×1