如何排序列表< >其中T是我自己的类,我想按class.somestring排序

本文关键字:排序 自己的 我自己 somestring class 何排序 列表 其中 | 更新日期: 2023-09-27 18:02:28

我有一个class

Class MyClass{
    string myString;
    MyClass(string newString){
    myString = newString;
    }
}

我有一个列表

List<MyClass> myList = new List<MyClass>();
myList.Add(new MyClass(some string...);

可以使用List吗?排序排序的对象基于类的一个字段的值?如果是,那又是怎么回事呢?

谢谢

如何排序列表< >其中T是我自己的类,我想按class.somestring排序

您可以使用Enumerable.OrderBy:

myList = myList.OrderBy(x => x.myString).ToList();

请注意,这会在旧列表的基础上创建一个新列表。在许多情况下,这不会有什么不同,但这是值得注意的。


或者,由于您限于。net 2.0,您可以定义一个用于比较的自定义函数

class MyClass
{
    string myString;
    ...
    public static int CompareByMyString(MyClass x, MyClass y)
    {
        return String.Compare(x.myString, y.myString);
    }
}

并提供给List.Sort:

myList.Sort(MyClass.CompareByMyString);

你可以继承IComparable。一个例子是:

public class MyClass : IComparable
    {
        public int Day { get; set; }
        public int Hour { get; set; }
        public int CompareTo(object obj)
        {
            if (obj is MyClass)
            {
                MyClass slot = (MyClass)obj;
                if (Day < slot.Day)
                {
                    return -1;
                }
                else if (Day > slot.Day)
                {
                    return 1;
                }
                else
                {
                    if (Hour < slot.Hour)
                    {
                        return -1;
                    }
                    else if (Hour > slot.Hour)
                    {
                        return 1;
                    }
                    else
                    {
                        return 0;
                    }
                }
            }
            else
            {
                throw new ArgumentException("Object is not MyClass");
            }
        }
        public override int GetHashCode()
        {
            unchecked
            {
                return Day.GetHashCode() ^ Hour.GetHashCode();
            }
        }
        public override bool Equals(object obj)
        {
            if (obj is MyClass)
            {
                return this == (MyClass)obj;
            }
            else
            {
                throw new ArgumentException("Object is not MyClass");
            }
        }
        public static bool operator ==(MyClass a, MyClass b)
        {
            return a.CompareTo(b) == 0;
        }
        public static bool operator !=(MyClass a, MyClass b)
        {
            return a.CompareTo(b) != 0;
        }
        public static bool operator <(MyClass a, MyClass b)
        {
            return a.CompareTo(b) < 0;
        }
        public static bool operator >(MyClass a, MyClass b)
        {
            return a.CompareTo(b) > 0;
        }
        public static bool operator <=(MyClass a, MyClass b)
        {
            return a.CompareTo(b) <= 0;
        }
        public static bool operator >=(MyClass a, MyClass b)
        {
            return a.CompareTo(b) >= 0;
        }
    }

然后你可以这样写:

List<MyClass> listOfStuff = new List<MyClass>();}
// Add some stuff to the list E.G. 
listOfStuff.add(new MyClass());
// Sort the list
listOfStuff.sort();