通用列表管理器。无法使用包含比较器方法的对象访问 Sort 方法中的比较器接口

Generic list manager. Cant access Comparer interface in Sort method with object that inludes comparer method

我有一个通用列表管理器 class ListManager,我用它来将 AnimalManager 子class 中的 Animal 对象存储到列表管理器。

在Animal中class我添加了IComparer接口并添加了Compare方法。

出于某种原因,我在下面的排序方法 se 代码中的 ListManager 中遇到错误。

在 ListManager 中....

//Method for sorting.
public void SortComp(T aType)
{
    aList.Sort(aType);  //This is where I get the error
}

在动物中....

//Def field sortby enum with default value name
private SortBy compareField = SortBy.Name;

//Getter and setter
public SortBy CompareField
{
     get { return compareField; }
     set
     {
        compareField = value;
     }
}

//Method (as specified by IComparer) for comparing two objects. Makes use of CompareTo method
public int Compare(Animal x, Animal y)
{
   //Depending on how the comparefield is set do different sorting 
    switch (compareField)
    {
        case SortBy.Name:
            return x.Name.CompareTo(y.Name);

         case SortBy.ID:
            return x.ID.CompareTo(y.ID);

         default:
            return x.Name.CompareTo(y.Name);//Just in case
    }
}

最后,使我的列表受保护(而不是私有)访问特定列表管理器 (AnimalManager) 中的列表,并将 AnimalComparer 对象作为 Sort 方法的输入。这行得通,但我真的很想在通用列表管理器中完成它,而不是将列表保留为私有。

研究了一番,找到了更好的解决方案,直接在general manager中使用IComparer接口

public void Sort(IComparer 排序器) {

aList.Sort(分拣机);

}

其中 sorter 是包含相应排序方法的对象。