【问题标题】:Custom Attribute that uses Type as a property使用 Type 作为属性的自定义属性
【发布时间】:2013-04-18 02:10:33
【问题描述】:

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

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

为了使用它,我想这个

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

public class MyClass2
{
}

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

我宁愿不这样做:

[HelpMe(TypeName = "MyClass2"]

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

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

【问题讨论】:

    标签: c# custom-attributes


    【解决方案1】:

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

    那么为什么不直接使用Type

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

    【讨论】:

    • 我认为它不会按原样编译。我认为您需要定义一个构造函数来接收类型并分配它。但除此之外,这是正确的,我也会这样做。 +1
    • 任何具有公共设置器的属性的属性都可以这样设置。虽然是的,你可以做到这一点。
    • 啊不知道。我实际上已经测试过你的,但我有一个错字。我喝了太多酒,并认为编译器错误是说语法不正确。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    相关资源
    最近更新 更多