Я ищу хорошее объяснение, почему один фрагмент кода не компилируется, а другой компилируется нормально.
Ошибка:
richTextBox1.Invoke(new MethodInvoker((() => { richTextBox1.AppendText("test"); })));
Выдает ошибку
Ожидаемое имя метода
в открывающей скобке сразу после MethodInvoker (
. По-видимому, я не могу обернуть свои лямбда-выражения в круглые скобки.
Компилирует:
richTextBox1.Invoke(new MethodInvoker(() => { richTextBox1.AppendText("test"); }));
Возникает вопрос - почему?
Я всегда считал само собой разумеющимся, что могу заключить любой параметр метода в круглые скобки, если захочу, но, очевидно, это не относится к лямбда-выражениям. Я понимаю, что они в чем-то особенные, но пока не вижу для этого веской причины. Может я чего-то не понимаю в синтаксисе. Я бы очень хотел его получить.
Кстати, он присутствует в VS2008, .NET 3.5 SP1, я еще не тестировал его в VS2010 и .NET 4.