使用Type作为属性的自定义属性

本文关键字:自定义属性 属性 Type 使用 | 更新日期: 2023-09-27 18:09:50

我有以下自定义属性,我希望将类型名称作为属性。但是,我不希望在使用属性时必须使用类型的字符串表示形式。例子:

public class HelpMeAttribute : Attribute
{
    public string TypeName { get; set; }
}

为了使用它,我认为这

[HelpMe(TypeName = typeof(MyClass2).FullName]
public class MyClass1
{
}
public class MyClass2
{
}

我得到错误:"属性必须是一个常量表达式、typeof表达式或属性参数类型的数组创建表达式。"

我宁愿不做:

[HelpMe(TypeName = "MyClass2"]

,因为把类型放在字符串中看起来很糟糕。最好让编译器检查我放入属性中的类型是否存在。

谁能给我指路来解决这个问题?

使用Type作为属性的自定义属性

属性初始化器只能使用编译时常量或System.Type属性。

为什么不直接用Type呢?

public class HelpMeAttribute : Attribute
{
    public Type Type { get; set; }
    ...
    public HelpMeAttribute()
    {
    }
}
...
[HelpMe(Type = typeof(MyClass2))]
public class MyClass1
{
}