避免多种类似方法中的重复代码(C#)

大家问候!

我在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; } 

到目前为止,我只是设法让它以这种方式工作,以防所有参数在编码时具有相同的已知类型。 经过多次尝试用通用代表解决这个问题后,我开始认为这是不可能实现的。 即使我的代码编译,它也无法在运行时运行。 任何接受者? 在此先感谢您的帮助!

这是使用generics委托的示例:

 int MethodY(int something, int other) { return UniversalMethod(() => GetResultForMethodY(something, other)); } string MethodX(string something) { return UniversalMethod(() => GetResultForMethodX(something)); } T UniversalMethod(Func fetcher) { T resultObject; //nesting preparation code here... { resultObject = fetcher(); } //nesting result processing code here ... return resultObject; } 

如果ResultObjectType始终相同,则可以删除所有T s。

重复/相同的部分:ResultObjectType,准备代码,结果处理代码。

您应该集中精力使这些部件尽可能隔离。

另一种方法是代码生成。