Я хотел бы создать несколько перегруженных методов, которые принимают параметр Func. Перегруженные методы должны вызывать метод с наиболее универсальными типами, определенными в параметре. Ниже приведен краткий пример моих методов, и как я хотел бы их называть:
public static TResult PerformCaching<TResult, T1>(Func<T1, TResult> func, T1 first, string cacheKey)
{
return PerformCaching((t, _, _) => func, first, null, null, cacheKey);
}
public static TResult PerformCaching<TResult, T1, T2>(Func<T1, T2, TResult> func, T1 first, T2 second, string cacheKey)
{
return PerformCaching((t, t2, _) => func, first, second, null, cacheKey);
}
public static TResult PerformCaching<TResult, T1, T2, T3>(Func<T1, T2, T3, TResult> func, T1 first, T2 second, T3 third, string cacheKey)
{
Model data = Get(cacheKey);
if(data == null)
{
Add(cacheKey);
data = func.Invoke(first, second, third);
Update(data);
}
return data;
}
Можно ли заставить его работать вот так? Другой вопрос, что происходит с функцией, когда она достигает последнего метода. Будет ли он выполняться с одним параметром (при вызове первого метода) или со всеми тремя параметрами.