c# - 减少代码重复 : Calling functions with slightly different signatures

标签 c# refactoring

假设我有两个如下所示的函数:

public static void myFunction1(int a, int b, int c, string d)
{
    //dostuff
    someoneelsesfunction(c,d);
    //dostuff2
}

public static void myFunction2(int a, int b, int c, Stream d)
{
    //dostuff
    someoneelsesfunction(c,d);
    //dostuff2
}

什么是避免重复重复的好方法?

我想到但不喜欢的想法:

  1. 我可以使 d 成为一个对象并根据类型在运行类型上进行转换,但这让我觉得不太理想;它删除了之前在编译时发生的类型检查。
  2. 我还可以编写一个私有(private)帮助程序类,它接受一个对象并将两个签名写为公共(public)函数。
  3. 我可以用委托(delegate)或函数调用或其他东西替换 dostuff 和 dostuff2。

最佳答案

只需将“doStuff”和“doStuff2”重构为单独的方法即可。

他们显然在做与“someoneelsesfunction”方法不同的“事情”,所以无论如何它们应该是单独的方法。理想情况下,每种方法都应该有一项任务。

这甚至是 Visual Studio 中支持的重构 - 只需突出显示“dostuff”中的代码,然后右键单击,然后选择 Refactor->Extract Method。

关于c# - 减少代码重复 : Calling functions with slightly different signatures,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2556509/

相关文章:

c# - 操作数类型冲突 : varchar is incompatible with varchar(50) trying to insert in encrypted database

c# - COM互操作问题

c# - 如何在 ConcurrentDictionary 中设置一个值,而不管它是否包含 Key

c++ - 在 C++ 中是否可以通过类似属性的语法调用访问器?

ruby - 重构圈复杂度

c# - 为什么 EF4 Code First 在存储对象时这么慢?

c# - 如何保护将由移动应用程序和 Web 使用的 API

python - 使用 SQLite3 + Mutagen 优化 Python 代码

C++ 重构 : conditional expansion and block elimination

android - 在android studio中重构移动文件时出现意外的元素类型类