.net中泛型类型的属性约束?

时间:2010-06-22 22:18:48

标签: .net type-constraints

<。>在.net中,如果我有一个通用类SomeClass<T>,是否可以使用where关键字来要求T是具有特定属性的类?类似的东西:

[SomeAttribute]
class MyClass
{
    ...
}

class AnotherClass<T> where T : Attribute(SomeAttribute)
{
    ...
}

2 个答案:

答案 0 :(得分:3)

不,那是不可能的。

您最接近的方法是要求该类实现特定的接口。

答案 1 :(得分:2)

不,你不能,但你可以通过检查静态构造函数中的属性来解决这个问题:

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
    }
}