Я знаю, что то, что я делаю, может быть сделано по-другому, но мне интересно, как все работает. Ниже приведен упрощенный код, который не компилируется, но он должен показывать мою цель.
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);
}
Transform
- это общее преобразование из строки в некоторый объект (подумайте о десериализации).
GeneralizedFunction
использует две специализации преобразования: один для типа A и один для типа B. Я знаю, что могу сделать это несколькими другими способами (скажем, введя параметр для типа объекта), но я ищу для объяснения того, возможно ли это или невозможно сделать это с помощью generics/lambdas. Если Transform специализируется, прежде чем он будет передан как параметр для GeneralizedFunction, тогда это невозможно. Тогда возникает вопрос, почему эта возможность ограничена.