Делегат тип должен быть определен вне функции. Фактический делегат может быть создан внутри метода, как и вы.
class MyClass {
delegate int Sum(int a, int b);
public void MyMethod(){
Sum mySumImplementation=delegate (int a, int b) {return a+b;}
Console.WriteLine(mySumImplementation(1,1).ToString());
}
}
будет действительным.
Наилучшим решением может быть эмуляция .NET3.5 и создание глобальных типов делегатов, которые можно использовать повсюду в вашем решении, чтобы избежать необходимости постоянно переопределять типы делегатов для всего:
delegate R Func<R>();
delegate R Func<T, R>(T t);
delegate R Func<T0, T1, R>(T0 t0, T1 t1);
delegate R Func<T0, T1, T2, R>(T0 t0, T1 t1, T2 t2);
Тогда вы можете просто использовать делегат Func<int, int, int>
в своем коде выше.