Делегатор 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)
?
Ответы
Ответ 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 параметров.