我想用自定义属性编写我的枚举,例如:
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
}
问题来了:我希望 Class1
继承自 ICustomInterface
,因此使用泛型我可以编写约束:
[AttributeUsage(AttributeTargets.All)]
class SomeAttribute<T> : Attribute where T: ICustomInterface
{
}
但是属性不支持泛型。
所以最后的问题是:我如何在编译时检查(如 T
约束)该类型正在实现某个接口(interface)?
最佳答案
你的最后一个问题很简单:
so finally question is: how can I check in compile time (like T constraints) that type is implementing some interface?
你不能那样做。
但是你可以在运行时检查它,使用一些反射方法,比如: Type.IsAssignableFrom
关于c# - 属性中的类型约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26521670/