我有一份人员名单List<person>
public class Person
{
public string Age { get; set; }
}
他们的年龄在string
,但实际上是int
类型,其值为"45", "70", "1" etc.
。如何从旧到年轻的列表排序?
调用people.Sort(x => x.Age);
并未提供所需的结果。感谢。
答案 0 :(得分:6)
这应该有用(假设people
是List<Person>
):
people = people.OrderByDescending(x => int.Parse(x.Age)).ToList();
如果您不想创建新的List
,也可以为您的班级实施IComparable<T>
:
public class Person : IComparable<Person>
{
public string Age { get; set; }
public int CompareTo(Person other)
{
return int.Parse(other.Age).CompareTo(int.Parse(this.Age));
}
}
然后你只需要使用Sort
方法:
people.Sort();
答案 1 :(得分:6)
您可以将每个字符串转换为int,然后对它们进行排序,从最大到最小:
var oldestToYoungest = persons.OrderByDescending(x => Int32.Parse(x.Age));
那会给你想要的结果(假设年龄为“7”,“22”和“105”):
105
22
7
如果您将它们排序为字符串,则无法获得所需的结果,如您所发现的那样。您最终会按字母顺序排列一个列表,例如:
"7"
"22"
"105"