如何避免使用不同参数的方法

时间:2017-06-02 11:01:31

标签: c# methods parameters

我有许多不同参数的类似方法。我试图找到一个好的和简单的重构解决方案,但没有结果。我可以使用参数对象,但我认为我需要创建另一个辅助类,它会使一切变得更复杂和更慢。

void Foo(ref int test2)
{
    Goo(test2);
}

void Foo(ref long test2)
{
    Goo(test2);
}

void Foo(ref double test2)
{
    Goo(test2);
}

void Foo(ref string test2)
{
    if (!test2.IsNull())
        test2 = "sth";
    Goo(test2);
}

2 个答案:

答案 0 :(得分:3)

使用generics

void Foo<T>(ref T test2)
{
    Goo(test2);
}

答案 1 :(得分:2)

  1. 多方法重载并不是必须避免或重构的坏事。所以在重构它之前要三思而行。
  2. 你的方法似乎是平等的,但他们不是。请看一下字符串参数的Foo方法的实现。如果为null,则输入值替换。如果 通用 实施,则应通过类型检查覆盖案例
  3. 从您的示例中我看到您有一个嵌套方法调用,但重新实现了accordantelly输入参数类型。请找出它可能是出于目的吗?可能是您的代码是其他语言中引用的API的一部分,这些语言没有 泛型 的概念。
  4. 如果您仍然确定必须重构它,则可以使用以下选项:

    • 通用
    • OOP(polimorfism and virtualization)
    • 使用动态或对象输入参数类型(关于装箱和类型比较要非常小心)
    • 如果你想减少代码的数量,你必须保留,但最后的代码有很多相同方法的实现对你来说没问题,在这种情况下T4可以是一个选项