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

Lar*_*rry 7 c# delegates anonymous-methods

关于立即启动计时器的一个很好的答案,我可以看到以下代码:

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

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

void DoWork() {
    // etc...
}
Run Code Online (Sandbox Code Playgroud)

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

                                What?
                                  |
                                  V
    ThreadPool.QueueUserWorkItem((_) => DoWork());
Run Code Online (Sandbox Code Playgroud)

哪个隐藏规则使得下划线"_"可以作为匿名委托中的参数名称接受?

usr*_*usr 12

下划线是C#中的普通标识符字符.例如my_money是有效的.所以_同样有效x.

你也可以写_ => DoWork()一些我认为更常见的东西.

  • 值得注意的是,从概念上讲,下划线表示它表示的参数未在内部函数中使用,但需要提供它以满足编译器.基本上是一种说"不要介意我"的简写方式. (7认同)