MethodInvoke делегат или лямбда-выражение - PullRequest
14 голосов
/ 13 октября 2011

В чем разница между двумя?

Invoke((MethodInvoker) delegate {
        checkedListBox1.Items.RemoveAt(i);
        checkedListBox1.Items.Insert(i, temp + validity);
        checkedListBox1.Update();
    }
);

против

Invoke((MethodInvoker)
    (
        () => 
        {
            checkedListBox1.Items.RemoveAt(i);
            checkedListBox1.Items.Insert(i, temp + validity);
            checkedListBox1.Update();
        }
    )
);

Есть ли причина использовать лямбда-выражение? И является ли (MethodInvoker) приведение делегата и лямбды к типу MethodInvoker? Какое выражение не потребует (MethodInvoker) приведения?

Ответы [ 3 ]

20 голосов
/ 13 октября 2011

1) Лямбда-выражение несколько короче и чище

2) Да

3) Вы можете использовать тип действия, например:

Invoke(new Action(
    () => 
    {
        checkedListBox1.Items.RemoveAt(i);
        checkedListBox1.Items.Insert(i, temp + validity);
        checkedListBox1.Update();
    }
)
);
3 голосов
/ 13 октября 2011

Два подхода эквивалентны.Первый известен как анонимный метод и является более ранней возможностью .net 2.0.Лямбда не должна требовать приведения.

Я бы предпочел лямбду, потому что она более широко используется в современной разработке на C # /.Анонимный делегат не предлагает ничего по лямбде.Лямбда допускает вывод типов, который варьируется от удобного до необходимого в некоторых случаях.

2 голосов
/ 14 апреля 2012

MethodInvoker предоставляет простой делегат, который используется для вызова метода со списком пустых параметров. Этот делегат можно использовать при вызовах метода Invoke элемента управления или когда вам нужен простой делегат, но вы не хотите определять его самостоятельно.

Действие с другой стороны может принимать до 4 параметров.

...