Они делают то же самое, но синтаксис "() => ..." - это то, что называется лямбда-выражением и, как таковое, аналогично анонимной функции. Возможно, вы могли бы вообще пропустить делегатскую часть и просто позволить компилятору определить тип делегата.
del = this.SomeAction;
В зависимости от того, какой тип "del" обозначается как.
Редактировать
Использование лямбда-выражения или анонимных методов или просто обычного метода для начинающих позволяет отображать методы, которые не имеют подписи делегата, для делегата.
Например, скажем, у вас есть делегат с подписью bool myDelegate (int, int), но вы хотите иметь метод с подписью bool myMethod (string, string) для обработки делегата. Затем вы можете использовать лямбда-выражение, чтобы позволить вам сделать это встроенным с коротким синтаксисом, подобным этому.
delegate bool myDelegate(int x, int y);
// With lambdas...
myDelegate del = (int a, int b) => myMethod(a.ToString(), b.ToString());
// With anonymous methods...
myDelegate del2 = delegate(int a, int b) { return myMethod(a.ToString(), b.ToString()); };
// The good ol' way without lambdas or anonymous methods...
myDelegate del3 = SomeDelegateHandler;
... then write a method somewhere else ...
// Handler method
private bool SomeDelegateHandler(int a, int b)
{
return myMethod(a.ToString(), b.ToString());
}
Так что, как вы можете видеть, лямбда-выражения и анонимные методы - это просто более короткий / встроенный способ создания метода для обработки делегата. В вашем случае вам может не понадобиться делать дополнительный метод. Это зависит только от того, совпадает ли подпись делегата с сигнатурой вашего метода, и мне кажется, что это так.