我想用自定义属性编写枚举,例如:

public enum SomeEnum: long
{
    [SomeAttribute<MyClass1>]
    Sms = 1,
    [SomeAttribute<MyClass2>]
    Email = 2
}

但是属性不支持泛型。好吧,最相似的解决方案是:
public enum SomeEnum: long
{
    [SomeAttribute(typeof(MyClass1))]
    Sms = 1,
    [SomeAttribute(typeof(MyClass2))]
    Email = 2
}

这里是问题:我希望Class1ICustomInterface继承,因此使用泛型,我可以编写约束:
[AttributeUsage(AttributeTargets.All)]
class SomeAttribute<T> : Attribute where T: ICustomInterface
{
}

但是属性不支持泛型。

所以最后一个问题是:如何检查类型正在实现某些接口(interface)的编译时(如T约束)?

最佳答案

对您的最后一个问题非常简单:



你不能这样做。

但是您可以在运行时使用一些反射方法来检查它,例如:
Type.IsAssignableFrom

10-01 21:44