Как мне убедиться, что тип данных реализует интерфейс IComparable

2

Мне нужно убедиться, что тип данных реализует интерфейс IComparable, и мне было интересно, если бы это было так, чтобы создать это требование при создании объекта?

  • 0
    Пожалуйста, уточните вопрос. Я могу придумать несколько вещей, которые вы могли бы иметь в виду, но у них у всех были разные ответы.
Теги:
interface

3 ответа

4
Лучший ответ

Возможно, вы можете использовать generic для этого, например:

public static T Create<T>() where T : IComparable<T>, new() {
    return new T();
}

Или, если вы имеете в виду "когда вы создаете тип" (в коде), то нет; вам просто нужно запомнить, возможно, используя модульные тесты, чтобы убедиться, что вы это сделали.

Я рекомендую использовать напечатанную IComparable<T> над IComparable - это облегчает жизнь (и избегает некоторых боксов, но это не проблема). Наконец, помните, что вы можете использовать Comparer<T>.Default и Comparer.Default в коде, если вы хотите утаивать сопоставимый бит (например, как работает List<T>.Sort()).

1

Для общего класса вы можете:

public class MyType<T>
   where T:IComparable<T>
0

Вы также можете посмотреть в Comparer <T> .Default. Из того, что я понимаю, сначала получается IComparable <T> , если он не может найти, что тогда он получает версию IComparable, в противном случае он генерирует исключение.

double s = 5;
double t = 10;
int result = Comparer<double>.Default.Compare(s, t);
  • 0
    Я верю, что это в конечном итоге бросит, если он не может найти подходящий IComparable
  • 0
    Ну, IComparable<T> , затем IComparable , затем бросить (не IComparer<T> т. Д.)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню