c# - 属性中的类型约束

标签 c# .net generics reflection custom-attributes

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

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/

相关文章:

c# - 如何在C#中声明一个类型为用户定义的实例

.NET 桌面应用程序记住登录到 web 服务

scala - 如何使用对象类型参数化类以在 Scala 中获取它的实例?

c# - SQL CommandText 语法不正确

c# - 对已包含通配符的字符串进行模式匹配

c# - 以编程方式单击 Xamarin.Forms 中的按钮

c# - System.Timers.Timer 生命周期

c# - 使用动态 LINQ(或泛型)查询/筛选 Azure 表

c# - 如何使用泛型配置 AutoMapper

C# SetWinEventHook 失败(返回 0)