Подтвердить что ты не робот

Делегатор MethodInvoke или выражение лямбда

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

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)?

4b9b3361

Ответ 1

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

2) Да

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

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

Ответ 2

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

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

Ответ 3

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

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