Установите ограничение общего типа на T.
public class BindingProperty<T> : IComparable where T : IComparable
{
public T Value {get; set;}
public int CompareTo(object obj)
{
if (obj == null) return 1;
var other = obj as BindingProperty<T>;
if (other != null)
return Value.CompareTo(other.Value);
else
throw new ArgumentException("Object is not a BindingProperty<T>");
}
}
Edit:
Альтернативное решение для обработки, если значение не реализует IComparable
. Это поддержит все типы, просто не будет сортировать, если они не реализуют IComparable
.
public class BindingProperty<T> : IComparable
{
public T Value {get; set;}
public int CompareTo(object obj)
{
if (obj == null) return 1;
var other = obj as BindingProperty<T>;
if (other != null)
{
var other2 = other as IComparable;
if(other2 != null)
return other2.CompareTo(Value);
else
return 1; //Does not implement IComparable, always return 1
}
else
throw new ArgumentException("Object is not a BindingProperty<T>");
}
}