2009-03-27 1 views
2

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

+0

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

ответ

4

Вы можете, возможно, использовать общие, чтобы сделать это, например:

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()).

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 – JaredPar

+0

Ну, 'IComparable ', затем 'IComparable', затем бросить (не' IComparer 'и т. Д.) –

+0

Обновлено, чтобы отразить, спасибо. – bendewey