Мне нужно убедиться, что тип данных реализует интерфейс IComparable, и мне было интересно, если бы все-таки было необходимо выполнить это требование при создании объекта? неКак убедиться, что тип данных реализует интерфейс IComparable
ответ
Вы можете, возможно, использовать общие, чтобы сделать это, например:
public static T Create<T>() where T : IComparable<T>, new() {
return new T();
}
Или, если вы имеете в виду «при создании типа» (в коде), то нет; вам просто нужно запомнить, возможно, используя unit-тесты, чтобы убедиться, что вы это сделали.
Я рекомендую использовать напечатанный IComparable<T>
по телефону IComparable
- это облегчает жизнь (и позволяет избежать бокса, но это не проблема). Наконец, помните, что вы можете использовать Comparer<T>.Default
и Comparer.Default
в коде, если вы хотите укусить сопоставимый бит (как работает List<T>.Sort()
).
Для общего класса, который вы можете сделать:
public class MyType<T>
where T:IComparable<T>
Вы также можете посмотреть в Comparer<T>.Default. Из того, что я понимаю, сначала получается IComparable < T>, если он не может найти, что тогда он получает версию IComparable, иначе он выдает исключение.
double s = 5;
double t = 10;
int result = Comparer<double>.Default.Compare(s, t);
Пожалуйста, уточните вопрос. Я могу подумать о нескольких вещах, которые вы могли бы иметь в виду, но у всех были разные ответы. –