Почему круглые скобки вокруг лямбда-выражения вызывают синтаксическую ошибку?

Я ищу хорошее объяснение, почему один фрагмент кода не компилируется, а другой компилируется нормально.

Ошибка:

richTextBox1.Invoke(new MethodInvoker((() => { richTextBox1.AppendText("test"); })));

Выдает ошибку

Ожидаемое имя метода

в открывающей скобке сразу после MethodInvoker (. По-видимому, я не могу обернуть свои лямбда-выражения в круглые скобки.

Компилирует:

richTextBox1.Invoke(new MethodInvoker(() => { richTextBox1.AppendText("test"); }));

Возникает вопрос - почему?

Я всегда считал само собой разумеющимся, что могу заключить любой параметр метода в круглые скобки, если захочу, но, очевидно, это не относится к лямбда-выражениям. Я понимаю, что они в чем-то особенные, но пока не вижу для этого веской причины. Может я чего-то не понимаю в синтаксисе. Я бы очень хотел его получить.

Кстати, он присутствует в VS2008, .NET 3.5 SP1, я еще не тестировал его в VS2010 и .NET 4.

10
задан Micha Wiedenmann 13 April 2017 в 12:34
поделиться