【问题标题】:Generic list manager. Cant access Comparer interface in Sort method with object that inludes comparer method通用列表管理器。无法使用包含比较器方法的对象访问 Sort 方法中的比较器接口
【发布时间】:2018-03-22 08:27:45
【问题描述】:

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

在 Animal 类中,我添加了 IComparer 接口并添加了一个 Compare 方法。

由于某种原因,我在下面的排序方法代码中的 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
    }
}

【问题讨论】:

  • “一个错误”?请具体说明您遇到的错误。另外,“list.Sort(element)”是什么意思
  • 另外,将排序信息嵌入到列表中的每个元素中是非常罕见的并且可能有问题/错误,如果两个元素指定不同的排序信息怎么办?
  • 请发布错误 - 我们不介意读者。
  • error is Argument 1: cannot convert from 'T' to 'Syste.Collections.Generic.IComparer
  • 我首先创建了一个 AnimalComparer 类 bu,但它也不起作用......得到了同样的错误

标签: c# list sorting generics icomparer


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    做了一些更多的研究,然后通过直接在总经理中使用 IComparer 界面找到了更好的解决方案。

    public void Sort(IComparer 排序器) {

    aList.Sort(排序器);

    }

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-30
      • 1970-01-01
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      相关资源
      最近更新 更多