C# generic * не * реализует что-то

Я знаю, что могу сделать такой метод, как

private T MyFun<T>() 
  where T : IMyInterface
{...}

Можно ли сделать наоборот, т. Е. Где T не реализует IMyInterface? Конкретный вариант использования заключается в том, что я не хочу разрешать обнуляемые значения, но мне просто любопытно.

3 ответа

Решение

Нет, в общем случае вы не можете указать "список исключений". Однако, чтобы запретить использование типов Nullable, вы можете использовать ограничение "where T: class". Поскольку Nullable - это структура, она будет иметь желаемый эффект.

Редактировать: Ой, похоже, я был слишком поспешным - ты спрашивал, как запретить что-либо, что может быть нулевым, или, в частности, Nullable?

Если вы не хотите обнуляемые типы, вы можете сделать это.

private T MyFun<T>() 
  where T : struct
{...}

Вы всегда можете просто генерировать NotSupportedException() во время выполнения. По общему признанию, не так хорошо как компилятор, препятствующий этому

Другие вопросы по тегам