我想为冒泡排序实现一个委托解决方案。我有这样的代码:
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”:无法从“method group”转换为“DelegatesAndGenerics.SortHandler”
发布于 2010-06-26 02:09:24
是-您的bubble_sort方法需要一个int[]作为参数,而SortHandler仅指定IList<T>。您不能从bubble_sort创建SortHandler<int>。
仅仅因为您正在对int[]进行排序,并不意味着CollectionHelper.Sort一定会使用数组调用委托,而不是(比方说)调用List<int>。
例如,考虑下面的实现:
public void Sort<T>(T[] array, SortHandler<T> handler)
{
List<T> list = new List<T>(array);
handler(list);
}如果您设法将bubble_sort方法作为处理程序传入,您希望如何应对这种情况?
最简单的解决方案是将您的bubble_sort方法更改为接受IList<int>,而不仅仅是int[]。
(不过,我不得不说,这是一个有点奇怪的情况。通常,传递给泛型排序方法的处理程序是比较任意两个元素,而不是执行实际的排序本身。)
发布于 2010-06-26 02:08:27
我认为问题在于你的int[]不是IList。如果您像这样更改您的SortHandler委托:
public delegate void SortHandler<T>(IEnumerable<T> t);你应该能够使用数组,列表,或者你想要的任何东西。
https://stackoverflow.com/questions/3120296
复制相似问题