Как мне убедиться, что тип данных реализует интерфейс IComparable - PullRequest
2 голосов
/ 27 марта 2009

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

Ответы [ 3 ]

4 голосов
/ 27 марта 2009

Возможно, для этого вы можете использовать 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 голос
/ 27 марта 2009

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

public class MyType<T>
   where T:IComparable<T>
0 голосов
/ 27 марта 2009

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

double s = 5;
double t = 10;
int result = Comparer<double>.Default.Compare(s, t);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...