Ограничение атрибута на общем типе в .NET?
-
29-09-2019 - |
Вопрос
в .net, если у меня есть общий класс SomeClass<T>
, возможно ли использовать where
Ключевое слово, требующее, чтобы T был классом с определенным атрибутом? что-то типа:
[SomeAttribute]
class MyClass
{
...
}
class AnotherClass<T> where T : Attribute(SomeAttribute)
{
...
}
Решение
Нет, это невозможно.
Самое близкое, что вы можете сделать, это потребовать, чтобы класс реализовал конкретный интерфейс.
Другие советы
Нет, вы не можете, но вы можете обойти это, проверив атрибут в статическом конструкторе:
public class MyType<T> {
static MyType() {
// not compile checked, something like:
if (!Attribute.IsDefined(typeof(T), typeof(MyAttribute))
throw new ArgumentException(); // or a more sensible exception
}
}
Не связан с StackOverflow