代码之家  ›  专栏  ›  技术社区  ›  Everyone_Else

对所有包含特定参数的任意几个类中的任意一个进行排序

  •  1
  • Everyone_Else  · 技术社区  · 5 年前

    public class KeyString
    {
        public string key;
        public int val;
    }
    public class KeySprite
    {
        public Sprite key;
        public int val;
    }
    public class KeyInt
    {
        public int key;
        public int val;
    }
    

    public static List<KeyString> SortKeyString(List<KeyString> l){
            l.Sort((a,b) => a.val.CompareTo(b.val));
            return l;
        }
    public static List<KeySprite> SortKeySprite(List<KeySprite> l){
            l.Sort((a,b) => a.val.CompareTo(b.val));
            return l;
        }
    public static List<KeyInt> SortKeyInt(List<KeyInt> l){
            l.Sort((a,b) => a.val.CompareTo(b.val));
            return l;
        }
    

    这个。。。从某种意义上说,它得到了正确的答案,但对我来说,这似乎是潜在的不必要的代码重复。是否可以编写一个排序方法来对这些类的列表进行排序?

    (注意:我一次只对一个类的列表进行排序—我们不打算在这里合并两个不同的类。)

    1 回复  |  直到 5 年前
        1
  •  1
  •   Ashkan Mobayen Khiabani    5 年前

    创建一个类,如:

    public class KeyBase
    {
        public int val;
    }
    

    现在从中继承所有类:

    public class KeyString : KeyBase
    {
        public string key;
    }
    public class KeySprite : KeyBase
    {
        public Sprite key;
    }
    public class KeyInt : KeyBase
    {
        public int key;
    }
    
    public static List<T> SortKey<T>(List<T> l) where T: KeyBase
    {
        l.Sort((a,b) => a.val.CompareTo(b.val));
        return l;
    }
    

    key

    public class Key<T>
    {
        public T key;
        public int val;
    }
    
    public static List<Key<T>> Sort<T>(List<Key<T>> l)
    {
            l.Sort((a,b) => a.val.CompareTo(b.val));
            return l;
    }
    
    var stringKeys = new List<Key<string>> { ... };
    var intKeys = new List<Key<int>> { ... };
    var SpriteKeys = new List<Key<Sprite>> { ... };
    

    Demo