gpt4 book ai didi

c# - 如何允许我将方法传递给 List.Sort()?

转载 作者:太空宇宙 更新时间:2023-11-03 22:04:54 25 4
gpt4 key购买 nike

我调用 Sort List 上:

List<Stuff> list = new List<Stuff>();
list.Sort(StuffSortByName);

StuffSortByName声明:

private static int StuffSortByName(Stuff x, Stuff y)
{
...
}

令我吃惊的是我的代码编译并且有效。令人惊讶的是 Sort 没有重载采用方法:

所以我很幸运,因为我不想创建一个实现 IComparer 的完整对象,只是为了排序。但是对于我的生活,我在编译时不明白。


现在我想复制那个魔法。我想对 ListView 进行排序。但是您不对列表进行排序,而是给 ListView 一个 IComparer通过它的 ListViewItemSorter 属性:

listView1.ListViewItemSorter = [IComparer]

再一次,我不想编写整个对象,我只想传递一个本地方法(最好是非静态方法):

listView1.ListViewItemSorter = SortListView;


private static int SortListView(Object x, Object y)
{
....
}

当然这不会编译,因为它没有意义。但是早期的语法也不应该编译 - 但它可以。

所以它给了我希望,我可以在这里使用同样令人困惑的语法。

如何允许我在第一种情况下将方法作为排序比较器传递,而在第二种情况下却不允许?

最佳答案

回答你的第一个问题,方法名可以传递的原因是因为Comparison<T>是委托(delegate)类型,这意味着它是表示方法签名的类型。参见 MSDN了解详情。

在您的情况下,您应该创建一个 IComparer反对或让你的Stuff对象工具IComparableIComparable<T> (如果可能的话)。

关于c# - 如何允许我将方法传递给 List.Sort()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8795893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com