Как уже говорили другие, это лямбда, которая в основном является анонимной (неназванной) локальной функцией.
Это может иметь немного больше смысла, если вы посмотрите на некоторый подобный код, который не использует лямбда-выражения:
// With a lambda
private void OnFormLoad()
{
ThreadPool.QueueUserWorkItem(() => GetSqlData());
}
// Without a lambda
private void OnFormLoad()
{
ThreadPool.QueueUserWorkItem(ExecuteGetSqlData);
}
private void ExecuteGetSqlData()
{
// If GetSqlData returns something, change this to "return GetSqlData();"
GetSqlData();
}
Что касается другого кода, обычно вам не нужно делать new Action
.Проблема заключается в том, что метод BeginInvoke
принимает Delegate
, что является чем-то вроде старой школы, и нарушает работу большинства новых кодов.
С более новым кодом (который принимает что-то вроде Action
иликонкретный тип делегата, например WaitCallback
), вы либо пишете лямбду, либо просто даете имя функции внутри вашего класса.Пример кода, который я написал выше, демонстрирует оба из них.
Также обратите внимание, что если вы видите что-то вроде: (Action) (() => Blah())
, это в значительной степени совпадает с new Action(() => Blah())
.