(_) => 做工作();下划线如何作为匿名委托参数有效?

(_) => DoWork(); How an underscore is valid as a anonymous delegate parameter?

excellent answer about starting a timer immediately 中,我可以看到以下代码:

    timer.Elapsed += timer_Elapsed;
    ThreadPool.QueueUserWorkItem((_) => DoWork());
...

void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
    DoWork();
}

void DoWork() {
    // etc...
}

我自己试过了,我碰到了这一行,我认为匿名委托构造中有错字:

                                What?
                                  |
                                  V
    ThreadPool.QueueUserWorkItem((_) => DoWork());

哪个隐藏规则允许下划线“_”作为匿名委托中的参数名称?

下划线是 C# 中的普通标识符。例如 my_money 是有效的。所以 _x.

一样有效

你也可以写成_ => DoWork(),我觉得比较常见。