Мне нужно указать, что тип Generic должен принимать только перечисленные типы только в закрытом типе. Может ли кто-нибудь предложить способ сделать это, если сдерживающие способности не могут работать?Как ограничить аргументы типа общего типа конкретным типом, кроме ограничений?
ответ
Ближайшее ограничение структура:
класс C < E> где Е:/* * перечисление/структура
Если вам нужно, чтобы убедиться, что он является использование перечисления TypeOf (E) .IsEnum
Вы не можете сделать это непосредственно в C# - тип перечисления не используется в качестве ограничения. Один из вариантов (grungy) - использовать инициализатор типа (статический конструктор) для проверки во время выполнения. Он остановит его, используя несоответствующие типы во время выполнения, но не во время компиляции.
class Foo<T> where T : struct {
static Foo() {
if (!typeof(T).IsEnum) {
throw new InvalidOperationException("Can only use enums");
}
}
public static void Bar() { }
}
enum MyEnum { A, B, C }
static void Main() {
Foo<MyEnum>.Bar(); // fine
Foo<int>.Bar(); // error
}
Это может быть расстраивающим ограничением .net порой - тем более, что Enum не единственный тип, который исключается из используемые в ограничении - так: System.Delegate, System.Array и System.ValueType. – LBushkin
@LBushkin - ValueType выполним через: struct (хотя это исключает Nullable
Так как вы сказали, что вы не можете использовать ограничения, единственное другое решение пришло мне в голову, чтобы использовать динамическое приведение и проверить во время выполнения результата. Это гораздо хуже, чем использование ограничений в качестве решения. Однако, here вы можете найти статью, которая может помочь.
- 1. Аргументы общего типа внутри общих ограничений
- 2. Аргументы общего типа Выпуск
- 3. Работа с типом общего типа
- 4. Почему закрытые классы не допускаются для ограничений типа общего типа?
- 5. Ограничить аргументы конструктора типа данных
- 6. Использование универсального типа передается без ограничений с ограничениями общего типа
- 7. Множественных где ограничений для одного общего типа
- 8. Java: Задание ограничений типа общего типа в подтипе
- 9. Может ли Java выводить аргументы типа из ограничений параметров типа?
- 10. Haskell: Создать функцию определенного типа с одним типом общего типа?
- 11. аргументы Недостающие типа для общего класса
- 12. Аргументы общего типа в производных классах
- 13. Наследование типа общего типа
- 14. Как ограничить класс шаблона, кроме только данных типа enum
- 15. Как один ограничить количество разрешенных типов в Java общего типа
- 16. Аргументы избыточного типа
- 17. Как ограничить выделение в JTree конкретным типом узла?
- 18. Тип цели общего типа
- 19. прохождение типа собственности общего типа
- 20. Java - тип возвращаемого типа общего типа
- 21. как общего типа собственности
- 22. Как получить аргумент типа общего типа?
- 23. Как получить имя типа аргумента общего типа?
- 24. C# определение общего типа
- 25. Переопределить общий метод с конкретным типом (параметр типа * скрывает класс *)
- 26. Как назначить члены общего типа в конструкторе общего типа?
- 27. Scala: вывод типа общего типа и аргумент типа
- 28. Ограничить XSD сложный тип с более конкретным типом
- 29. Разбор описания общего типа
- 30. Использование Generics для типа типа типа для общего типа
Кстати, что вы хотите сделать? Если это для «флагов» побитовая арифметика с дженериками (общий вопрос), есть еще один вариант ... –