我有以下代码:

public class SelectionList<T> : ObservableCollection<SelectionItem<T>> where T : IComparable<T>
{
  // Code
}

public class SelectionItem<T> : INotifyPropertyChanged
{
// Code
}


我需要创建一个类型为SelectionList的属性,如下所示:

public SelectionList<string> Sports { get; set; }


但是当我用DataRowView替换字符串时,

 public SelectionList<DataRowView> Sports { get; set; }`


我收到一个错误。为什么不起作用?

最佳答案

您的问题是string实现了IComparable<string>,而DataRowView没有实现。

SelectionList<T>有一个约束,要求T必须实现IComparable<T>,因此会出现错误。

public class SelectionList<T> : ObservableCollection<SelectionItem<T>> where T : IComparable<T>
{
  // Code
}


一种解决方案是子类化DataRowView并实现IComparable

public class MyDataRowView : DataRowView, IComparable<DataRowView>{
  int CompareTo(DataRowView other) {
    //quick and dirty comparison, assume that GetHashCode is properly implemented
    return this.GetHashCode() - (other ? other.GetHashCode() : 0);
  }
}


然后SelectionList<MyDataRowView>应该可以编译。

关于c# - 如何创建通用类类型的属性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2918486/

10-10 18:32