2014-10-24 3 views
0

у меня есть два метода, которые делают точно то же самым - заполнить 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; 
} 

Вопрос - можно ли извлечь эта общая часть, которая заполняет эти массивы, для повторного использования в обоих методах?

+1

Почему это даже вопрос? * Я могу извлечь эту общую часть ...? * Сделайте это сразу. Когда вы найдете дубликат кода, реорганизовать его. [Не повторяйтесь] (http://en.wikipedia.org/wiki/Don%27t_repeat_yourself). –

ответ

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); 
} 
1

Что об этом:

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)

+0

ref is someat antipattern in C# –

Смежные вопросы