1

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

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

为了使用它,我想这个

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

public class MyClass2
{
}

我收到错误:“属性必须是属性参数类型的常量表达式、typeof 表达式或数组创建表达式。”

我宁愿不这样做:

[HelpMe(TypeName = "MyClass2"]

因为在字符串中输入类型似乎很糟糕。最好让编译器检查我放入属性的类型是否存在。

有人可以指出我的启蒙之路来解决这个问题吗?

4

1 回答 1

1

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

那么为什么不直接使用Type呢?

public class HelpMeAttribute : Attribute
{
    public Type Type { get; set; }
    ...

    public HelpMeAttribute()
    {
    }
}

...
[HelpMe(Type = typeof(MyClass2))]
public class MyClass1
{
}
于 2013-04-18T02:12:14.187 回答