如何消除这些功能中的冗余代码?

时间:2018-07-02 15:14:36

标签: c# dry

为了指导性目的,我写了一些计时代码。一组代码使用冒泡排序(证明O(n ^ 2)的复杂性),另一组代码使用快速排序(O(n log n))。功能签名不同;我的冒泡排序接受一个int数组并返回一个int数组,而quicksort接受一个int数组并就地对其进行修改-避免返回。这是我计时操作的代码:

charset

我只需要一个TimeOperation函数,但是我不太清楚如何处理两个不同的委托。我尝试将第一个参数设为泛型,但是我无法通过委托来做到这一点-或者至少我不知道该怎么做。如果我将其设为通用名称,那么它会令pymysql.connect感到不满意,我真的不希望这样保留代码,因为唯一不同的部分是我正在计时的实际功能。

关于这种情况下如何遵循DRY原则的任何建议?

1 个答案:

答案 0 :(得分:2)

您可以为快速排序创建其他方法,该方法具有与气泡排序方法相同的签名:

public int[] QuickSortEntry(int[] arr)
{
    QuickSort(arr, 0, arr.Length - 1);
    return arr;
}

或者您甚至可以这样做:

ArrayFunc qSort = arr => { QuickSort(arr, 0, arr.Length - 1); return arr; };

...并将其传递到您的计时器方法中。