我想为Bubble sort实现一个委托解决方案。我有这段代码:
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
答案 0 :(得分:3)
是的 - 您的bubble_sort
方法需要int[]
作为参数,而SortHandler
仅指定IList<T>
。您无法从SortHandler<int>
创建bubble_sort
。
仅仅因为您正好对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[]
。
(这是一个有点奇怪的情况,但我必须说。通常你传递给泛型排序方法的那种处理程序可以比较任何两个元素 - 而不是执行实际的排序本身。)< / p>
答案 1 :(得分:-1)
我认为问题是你的int[]
不是IList。如果您更改SortHandler
代表,请执行以下操作:
public delegate void SortHandler<T>(IEnumerable<T> t);
你应该能够使用数组,列表或任何你想要的东西。