Как ограничить универсальный тип enum? - PullRequest
7 голосов
/ 31 декабря 2011

Рассмотрим следующий код:

class Base<T>
{
 //Base members
}

Я хочу, чтобы универсальный T был перечислением (используя ограничения, если это возможно). Как я могу сделать это в C #?

EDIT:
Использование контрактов кода, введенных Akash Kava, также кажется хорошим способом. Мне удалось заставить его произвести ошибку времени выполнения, которая бесполезна. Вот код , который я пробовал. Должно быть возможно сгенерировать предупреждение о времени компиляции, но я не могу заставить его работать.

Ответы [ 2 ]

12 голосов
/ 31 декабря 2011

Это поддерживается на уровне IL, но не в C #. Вы можете взглянуть на мелодию без ограничений , написанную Джоном Скитом, которая позволяет вам достичь этого. А вот соответствующее сообщение в блоге , где он подробно объясняет.

1 голос
/ 17 января 2012

.NET 4.0 и более поздних версий вы можете создавать предупреждения, используя кодовые контракты, http://msdn.microsoft.com/en-us/devlabs/dd491992, это позволит вам проверить некоторые предварительные условия и отобразить предупреждения для разработчика.

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