2015-02-06 51 views
6

excellent answer about starting a timer immediately,我可以看到下面的代碼:(_)=> DoWork();下劃線如何作爲匿名委託參數有效?

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()); 

哪個隱藏規則在下一個匿名代理中將下劃線「_」作爲參數名稱可接受?

+5

在一般情況下,可以將單個下劃線作爲參數名稱的相同規則? '_'是C#中的有效標識符。 – 2015-02-06 10:13:24

+0

我不知道這一點,我很驚訝...感謝您指出這一點。 – Larry 2015-02-06 10:17:49

+0

我想標記爲[this]的副本(http://stackoverflow.com/questions/950616/what-c​​haracters-are-allowed-in-c-sharp-class-name),但我不想Mjolnir它,所以這是我的投票。 – Rawling 2015-02-06 10:22:18

回答

10

下劃線是C#中的普通標識符字符。例如my_money有效。所以_x一樣有效。

你也可以寫_ => DoWork(),我認爲這是比較常見的。

+6

值得注意的是,在概念上,下劃線表示它所表示的參數不在內部函數中使用,但需要提供它來滿足編譯器。基本上是說「不介意我」的簡短方式。 – 2015-02-06 10:26:41

+0

TIL'_'是一個有效的變量名稱 – Shekhar 2016-03-22 21:56:19