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() во время выполнения. По общему признанию, не так хорошо как компилятор, препятствующий этому