使用几乎相同的内容重构两个方法

gra*_*ady 3 c# refactoring

我有两种方法几乎相同的内容:

public string Method1(int someInt)
{
    if(someBoolean)
        return "test";

    if(someOtherBoolean)
    {
        return "dfjakdsad";
    }
    else
    {
        string myStr = getString(someInt)
    }
}

 public string Method2(myEnum myenum)
 {
    if(someBoolean)
        return "test";

    if(someOtherBoolean)
    {
        return "dfjakdsad";
    }
    else
    {
        string myStr = getString(myenum)
    }
 }
Run Code Online (Sandbox Code Playgroud)

区别在于方法签名和单个语句else,string myStr = getString

从许多地方调用Method1,因此它必须以某种方式保留.我该怎么重构呢?

Ada*_*rth 5

如果您的枚举可以转换为int,并假设您的getString返回枚举的数值而不是文本,那么只需:

public string Method2(myEnum myenum) 
 { 
    return Method1((int)myenum);
 } 
Run Code Online (Sandbox Code Playgroud)

作为一个有趣的一面 - 我已经看到这种情况创造了"相同的空白,不同的价值观".

另外有趣的是 - 我的基于头部的编译器说代码实际上不会编译:-)

我不担心重构这一点 - 增益略高于代码可读性,并且可能,如果发生变化,降低了变更的复杂性 - 但是它不是复杂的代码,因此如果大量使用额外的测试开销可能超过增益.

更新:如果enum getString返回文本,即"Foo",那么你就不能以我所描述的方式重构这段代码.


JSB*_*ոգչ 5

我建议使用泛型:

public string Method<T>(T arg)
{
    if(someBoolen)
        return "test";

    if(someOtherBoolean)
    {
        return "dfjakdsad";
    }
    else
    {
        string myStr = getString(arg)
    }
}
Run Code Online (Sandbox Code Playgroud)

这假设它getString本身是通用的或可以处理任何类型的对象.