首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >泛型委托和IList<T>

泛型委托和IList<T>
EN

Stack Overflow用户
提问于 2010-06-26 02:04:03
回答 2查看 218关注 0票数 0

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

代码语言:javascript
复制
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);

冒泡排序函数签名为:

代码语言:javascript
复制
static void bubble_sort(int[] array) {}

我得到了这个错误:

参数“%2”:无法从“method group”转换为“DelegatesAndGenerics.SortHandler”

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-26 02:09:24

是-您的bubble_sort方法需要一个int[]作为参数,而SortHandler仅指定IList<T>。您不能从bubble_sort创建SortHandler<int>

仅仅因为您正在对int[]进行排序,并不意味着CollectionHelper.Sort一定会使用数组调用委托,而不是(比方说)调用List<int>

例如,考虑下面的实现:

代码语言:javascript
复制
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[]

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

票数 3
EN

Stack Overflow用户

发布于 2010-06-26 02:08:27

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

代码语言:javascript
复制
public delegate void SortHandler<T>(IEnumerable<T> t);

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3120296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档