我有这段代码:
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; }`
我收到了错误消息。为什么这不起作用?
答案 0 :(得分:5)
您的问题是string
实施IComparable<string>
而DataRowView
没有。{/ p>
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>
应该编译好。
答案 1 :(得分:4)
您的班级where T : IComparable<T>
受到限制。 DataRowView不实现IComparable<DataRowView>
,因此在这种情况下不能使用。
有关通用约束的更多信息,请参见此处:http://msdn.microsoft.com/en-us/library/d5x73970.aspx