Если вы разработчик языка, как бы вы сделали игнорирование параметров более лаконичным для лямбда-выражений?

Основываясь на это, как бы вы сделали игнорирование параметров более кратким ?

var m = menuStrip.Items.Add("Привет", null, делегат { MessageBox.Show("Como Esta Mundo"); });

Я думаю в духе:

var m = menuStrip.Items.Add("Привет", null, ==> MessageBox.Show("Como Esta Mundo") );

var m = menuStrip.Items.Add("Привет", null, ? => MessageBox.Show("Como Esta Mundo") );

или, возможно, это:

var m = menuStrip.Items.Add("Привет", null, ?=> MessageBox.Show("Como Esta Mundo") );

Как бы вы поступили?

‹наблюдение за эволюцией языка› Они даже добавляют ?? оператора на язык, который действительно прекрасен. Теперь я думаю, что если они захотят сделать обратное (например, оператор NullIf), это очень полезно, если вы хотите рассматривать что-то как одно и то же "" или ноль равен нулю ‹/наблюдение за эволюцией языка›


person Community    schedule 04.07.2009    source источник


Ответы (1)


Что ж, как и в случае с анонимными методами, вам нужно знать тип времени компиляции, в который вы пытаетесь преобразовать лямбда-выражение (если только C# не начнет поддерживать бесплатные функции, что является большим изменением).

Мне очень нравится ?=> хотя:

Action<int> foo = ?=> Console.WriteLine("Okay");
EventHandler handler = ?=> Console.WriteLine("Okay too");

Теперь, когда ToolStripCollection.Add специально объявляет EventHandler делегатом, ваши примеры будут в порядке. Это не будет, хотя:

control.Invoke(?=> Console.WriteLine("No no no"));

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

person Community    schedule 04.07.2009