In un excellent answer about starting a timer immediately, ho potuto vedere il codice seguente:(_) => DoWork(); In che modo un carattere di sottolineatura è valido come parametro di delegato anonimo?
timer.Elapsed += timer_Elapsed;
ThreadPool.QueueUserWorkItem((_) => DoWork());
...
void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
DoWork();
}
void DoWork() {
// etc...
}
ho provato io stesso, e ho urtato su questa linea, in cui ho pensato che ci fosse un errore di battitura nella costruzione delegato anonimo:
What?
|
V
ThreadPool.QueueUserWorkItem((_) => DoWork());
Quale regola nascosta rende un trattino di sottolineatura "_" accettabile come nome parametro in un delegato anonimo?
La stessa regola che rende un singolo underscore accettabile come nome parametro nel caso generale? '_' è un identificatore valido in C#. –
Non lo sapevo e sono molto sorpreso ... Grazie per aver segnalato questo. – Larry
Voglio contrassegnare come duplicato di [questo] (http://stackoverflow.com/questions/950616/what-characters-are-allowed-in-c-sharp-class-name) ma non voglio Mjolnir, quindi ecco il mio voto. – Rawling