Приветствую всех!
У меня есть набор из нескольких (и, возможно, будет иметь еще десятки) очень похожих методов в C #.Все они построены по почти одинаковому шаблону:
ResultObjectType MethodX(...input parameters of various types...)
{
nesting preparation code here...
{
{
resultObject = ExternalClass.GetResultForMethodX(input parameters of MethodX);
}
}
nesting result processing code here ...
return resultObject;
}
Повторяющиеся / идентичные части: ResultObjectType, код подготовки, код обработки результатов .
Различные части: ExternalClassвызываемый метод, набор входных параметров (количество входных параметров, их типы).
Важно: я не контролирую сигнатуры метода - не могу их изменить.
Я пытаюсь избежать повторения всех блоков аналогичного кода с чем-то вроде этого:
ResultObjectType MethodX(...input parameters of various types...)
{
return UniversalMethod(
new ExternalMethodDelegate(ExternalClass.GetResultForMethodX),
input parameters of MethodX...);
}
ResultObjectType UniversalMethod (Delegate d, input parameters of various types...)
{
nesting preparation code...
{
{
resultObject =
(d as ExternalMethodDelegate)(same input parameters as above);
}
}
nesting result processing code...
return resultObject;
}
До сих пор мне удавалось заставить его работать таким образом только в случае, когда все параметры имеют одинаковые известныевведите во время кодирования.После ряда попыток решить эту проблему с обычными делегатами, я начинаю думать, что это невозможно достичь.Даже когда мой код компилируется, он не работает во время выполнения.Любой берущий?Заранее спасибо за помощь!