Я знаю, что то, что я делаю, можно сделать по-другому, но мне любопытно, как все работает. Ниже приведен упрощенный код, который не компилируется, но должен показать мою цель.
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, это невозможно. Тогда возникает вопрос, почему эта возможность ограничена.