Перегрузка метода с параметром Func

Я хотел бы создать несколько перегруженных методов, которые принимают параметр 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;
}

Можно ли заставить его работать вот так? Другой вопрос, что происходит с функцией, когда она достигает последнего метода. Будет ли он выполняться с одним параметром (при вызове первого метода) или со всеми тремя параметрами.

5
задан ChristiaanV 23 May 2011 в 11:25
поделиться