Вопрос

в .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
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top