下面的自定义排序算法
class ListViewItemComparer : IComparer
{
private int col;
public ListViewItemComparer()
{
col = 0;
}
public ListViewItemComparer(int column)
{
col = column;
}
public int Compare(object x, object y)
{
return String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text);
}
}
在1.1框架中运行正常,但到了2.0,就不行了。提示错误为“错误 使用泛型 类型“System.Collections.Generic.IComparer<T>”需要“1”个类型参数”。
那位知道怎么处理?在线等!

解决方案 »

  1.   

    实现这个接口System.Collections.Generic.IComparer<ListViewItem>用范型接口
      

  2.   

    from
    http://blog.ofo.cn/597.shtmlusing System.Collections;
    using System.Windows.Forms;/// <summary>
    /// 继承自IComparer
    /// </summary>
    public class ListViewColumnSorter : IComparer
    {
     /// <summary>
     /// 指定按照哪个列排序
     /// </summary>
     private int ColumnToSort;
     /// <summary>
     /// 指定排序的方式
     /// </summary>
     private SortOrder OrderOfSort;
     /// <summary>
     /// 声明CaseInsensitiveComparer类对象,
     /// 参见ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfSystemCollectionsCaseInsensitiveComparerClassTopic.htm
     /// </summary>
     private CaseInsensitiveComparer ObjectCompare; /// <summary>
     /// 构造函数
     /// </summary>
     public ListViewColumnSorter()
     {
      // 默认按第一列排序
      ColumnToSort = 0;  // 排序方式为不排序
      OrderOfSort = SortOrder.None;  // 初始化CaseInsensitiveComparer类对象
      ObjectCompare = new CaseInsensitiveComparer();
     } /// <summary>
     /// 重写IComparer接口.
     /// </summary>
     /// <param name="x">要比较的第一个对象</param>
     /// <param name="y">要比较的第二个对象</param>
     /// <returns>比较的结果.如果相等返回0,如果x大于y返回1,如果x小于y返回-1</returns>
     public int Compare(object x, object y)
     {
      int compareResult;
      ListViewItem listviewX, listviewY;  // 将比较对象转换为ListViewItem对象
      listviewX = (ListViewItem)x;
      listviewY = (ListViewItem)y;  // 比较
      compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text,listviewY.SubItems[ColumnToSort].Text);  // 根据上面的比较结果返回正确的比较结果
      if (OrderOfSort == SortOrder.Ascending)
      {
       // 因为是正序排序,所以直接返回结果
       return compareResult;
      }
      else if (OrderOfSort == SortOrder.Descending)
      {
       // 如果是反序排序,所以要取负值再返回
       return (-compareResult);
      }
      else
      {
       // 如果相等返回0
       return 0;
      }
     } /// <summary>
     /// 获取或设置按照哪一列排序.
     /// </summary>
     public int SortColumn
     {
      set
      {
       ColumnToSort = value;
      }
      get
      {
       return ColumnToSort;
      }
     } /// <summary>
     /// 获取或设置排序方式.
     /// </summary>
     public SortOrder Order
     {
      set
      {
       OrderOfSort = value;
      }
      get
      {
       return OrderOfSort;
      }
     }}
      

  3.   

    问题解决了,主要是用了using System.Collections.Generic,所以当出现IComparer 时,默认为是System.Collections.Generic.IComparer,从而报错。改为using System.Collections即可。
    谢谢各位了!