c# - 如何根据属性对 C# 列表进行排序?

标签 c# list sorting properties field

所以,我正在为我的 C# 类做作业,并且我有一个对象列表。这些对象有一个“int rand”字段,该字段被分配一个随机数。然后我想根据这个 rand 字段对列表中的对象重新排序。

我找到了这篇文章: http://www.developerfusion.com/code/5513/sorting-and-searching-using-c-lists/

这很有帮助。我修改了这一行以适合我的代码:

people.Sort(delegate(Person p1, Person p2) { return p1.age.CompareTo(p2.age); });

它满足了我的要求。

我想知道的是:它是如何工作的?这对我来说看起来很令人困惑。

最佳答案

事实上 Sort 方法应该基于一些比较进行排序,在您当前的代码中您将比较作为委托(delegate)传递,您也可以将其嵌入到类定义中以降低代码复杂性,实际上它只需要为您的 实现 IComparable人类:

 public class Person : IComparable
    {
        public int age { get; set; }

        public int CompareTo(object obj)
        {
            var person = obj as Person;
            if (person != null)
            {
                if (age > person.age)
                    return 1;
                else if (age == person.age)
                    return 0;
                return -1;
            }
            return 1;
        }
    }

然后只需使用不带委托(delegate)的排序即可。

关于c# - 如何根据属性对 C# 列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8002605/

相关文章:

python - 转换列表中项目的更有效方法

python - 访问 python 中的字典列表并使用值对其进行排序(嵌套字典)

c - for, if 在汇编语言中(冒泡排序)

c# - 从一个数据网格访问另一个数据网格的数据

特定类的 C# AttributeUsage

c# - 如何检查上下文是 Windows 服务还是控制台应用程序

python垃圾收集器和列表

c# - 在单个 FluentValidation 规则失败时抛出异常

c# - 使用MVVM将List <Object>设置为模型

c# - 如何在更改标题文本后在 gridview 中启用排序