0

我想为冒泡排序实现一个委托解决方案。我有这个代码:

public delegate void SortHandler<T>(IList<T> t);

public static void Sort<T>(IList<T> arr, SortHandler<T> func)
{
func(arr);
}

int[] arr2 = { 10,1,2,3,4 };
CollectionHelper.Sort<int>(arr2, bubble_sort);

冒泡排序函数签名是:

static void bubble_sort(int[] array) {}

我收到此错误:

参数“2”:无法从“方法组”转换为“DelegatesAndGenerics.SortHandler”

4

2 回答 2

3

是的-您的bubble_sort方法需要 aint[]作为参数,而SortHandler仅指定IList<T>. 您无法创建SortHandler<int>from bubble_sort

仅仅因为您碰巧对 a 进行排序int[]并不意味着CollectionHelper.Sort可以保证使用数组而不是(比如说) a 来调用委托List<int>

例如,考虑这个实现:

public void Sort<T>(T[] array, SortHandler<T> handler)
{
    List<T> list = new List<T>(array);
    handler(list);
}

如果您设法将bubble_sort方法作为您的处理程序传递,您将如何应对?

最简单的解决方案是将您的bubble_sort方法更改为 acceptIList<int>而不是 just int[]

(不过,我不得不说,这是一种有点奇怪的情况。通常,您传递给通用排序方法的处理程序类型将用于比较任何两个元素 - 而不是执行实际的排序本身。)

于 2010-06-25T18:09:24.393 回答
-1

我认为问题在于您int[]不是 IList。如果您SortHandler像这样更改您的代表:

public delegate void SortHandler<T>(IEnumerable<T> t);

你应该能够使用数组、列表或任何你想要的东西。

于 2010-06-25T18:08:27.493 回答