Вы можете создать свой собственный делегат, но в C # 3.0 может оказаться более удобным использовать встроенное семейство Func<T>
делегатов для решения этой проблемы. Пример:
public int GetCachedValue(string p1, int p2,
Func<DateTime, int> getCachedValue)
{
// do some stuff in here
// you can call getCachedValue like any normal function from within here
}
Этот метод будет принимать три аргумента: строку, int и функцию, которая принимает DateTime и возвращает int. Например:
int foo = GetCachedValue("blah", 5, methodToGetFoo); // using your method
int bar = GetCachedValue("fuzz", 1, d => d.TotalDays); // using a lambda
В структуре существуют разные типы Func<T, U, V...>
и т. Д. Для размещения методов с различным количеством аргументов.