调试器没有命中断点

Jor*_*nco 7 c# debugging delegates breakpoints list

我觉得很奇怪(我想!).如果我尝试在yes()方法中放置一个断点,它将永远不会在执行该函数时暂停程序.如果我尝试对任何其他代码行执行相同操作,它将按预期工作.这是一个错误,还是有什么东西逃脱了我?

过滤器将返回2个对象,除调试器外,一切似乎都按预期工作.

private void Form1_Load(object sender, EventArgs e) {
    List<LOL> list = new List<LOL>();
    list.Add(new LOL());
    list.Add(new LOL());

    IEnumerable<LOL> filter = list.Where(
        delegate(LOL lol) {
            return lol.yes();
        }
    );

    string l = "";   <------this is hit by the debugger
}

class LOL {
    public bool yes() {
        bool ret = true; <---------this is NOT hit by the debugger
        return ret;
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*upp 17

Enumerable.Lhere是一个惰性运算符 - 直到你调用通过where返回的IEnumerable(即调用它上面的.ToList()),你的函数才会被调用.

尝试将代码更改为此代码,看看它是否被调用:

....
IEnumerable<LOL> filter = list.Where(
    delegate(LOL lol) {
        return lol.yes();
    }
).ToList();

string l = "";
Run Code Online (Sandbox Code Playgroud)