Во-первых, я не уверен, имеет ли смысл использовать IComparable<T>
с перечислением ... IEquatable<T>
, конечно - но сравнение?
как более безопасная альтернатива; вместо того, чтобы указывать IComparable<T>
с общим ограничением, возможно, используйте Comparer<T>.Default
внутри класса. Это имеет преимущество поддержки IComparable<T>
и IComparable
- и это означает, что у вас меньше ограничений для распространения.
Например:
public class SomeClass<T> { // note no constraint
public int ExampleCompareTo(T other) {
return Comparer<T>.Default.Compare(Stored, other);
}
... [snip]
}
Это прекрасно работает с enum:
SomeClass<TestVal> t = new SomeClass<TestVal>();
t.Stored = TestVal.First;
int i = t.ExampleCompareTo(TestVal.Second); // -1