Передача универсальной функции в качестве параметра

Я знаю, что то, что я делаю, можно сделать по-другому, но мне любопытно, как все работает. Ниже приведен упрощенный код, который не компилируется, но должен показать мою цель.

private void Execute()
{
    GeneralizedFunction("1", "2", i => Transform(i));
}

void GeneralizedFunction(string aStringA, string aStringB, Func<string, T> aAction)
{
    A result1 = aAction(aStringA);
    B result2 = aAction(aStringB);
    // Do something with A and B here
}

T Transform<T>(string aString)
{
    return default(T);
}

Преобразование - это обычное преобразование строки в некоторый объект (подумайте о десериализации). GeneralizedFunction использует две специализации преобразования: одну для типа A и одну для типа B. Я знаю, что могу сделать это несколькими другими способами (например, введя параметр для типа объекта), но Я ищу объяснения, можно или невозможно сделать это с помощью дженериков / лямбда-выражений. Если Transform является специализированным до того, как передается в качестве параметра GeneralizedFunction, это невозможно. Тогда возникает вопрос, почему эта возможность ограничена.

12
задан Max 23 February 2012 в 13:08
поделиться