【问题标题】:Refactor methods, returning sorted arrays重构方法,返回排序数组
【发布时间】:2014-10-24 11:16:13
【问题描述】:

我有两种方法,它们做的事情完全相同 - 填写 arrayOfStrings 和 arrayOfInts, 并且具有相同的代码,除了最后一行:

public static string[] GetSortedStrings() 
{
    // (here are several lines of code to fill in those two arrays ...)
    Array.Sort(arrayOfStrings, arrayOfInts);
    return arrayOfStrings;
}


public static int[] GetSortedInts() 
{
    // (here are exactly same lines of code to get those arrays)
    Array.Sort(arrayOfStrings, arrayOfInts);
    return arrayOfInts;
}

问题是 - 我可以提取这个填充这些数组的公共部分,以便在这两种方法中重复使用吗?

【问题讨论】:

  • 为什么这是一个问题? 我可以提取这个公共部分吗...? 马上做。当你发现重复的代码时,重构它。 Don’t repeat yourself.

标签: c# refactoring


【解决方案1】:

会考虑这样的事情:

public static string[] GetSortedStrings() 
{
    var tuple = fillArrays();
    Array.Sort(tuple.Item1, tuple.Item2);
    return tuple.Item1;
}

public static int[] GetSortedInts() 
{
    var tuple = fillArrays();
    Array.Sort(tuple.Item1, tuple.Item2);
    return tuple.Item2;
}

public Tuple<string[],int[]> fillArrays() 
{
    // (here are several lines of code to fill in those two arrays ...)
    return Tuple.Create(strings, ints);
}

【讨论】:

    【解决方案2】:

    这个呢:

    public static string[] GetSortedStrings() 
    {
        doSomething(ref arrayOfStrings, ref arrOfInts);
        return arrayOfStrings;
    }
    
    
    public static int[] GetSortedInts() 
    {
        doSomething(ref arrayOfStrings, ref arrOfInts);
        return arrayOfInts;
    }
    
    public static void doSomething(ref string[] arrayOfString, ref int[] arrayOfInt) {
        // do your common stuff here
    }
    

    在 Visual Studio 中,您只需右键单击一段代码并重构它(Refactor-->Extract Method)

    【讨论】:

    • ref 在 c# 中是一种反模式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 2020-02-04
    • 2023-01-07
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多