0
[MyAttribute(Name = "Test123"]
public MyClass
{
    public string Name 
    {
       get { return "Test123"; }
    }
}

是这个代码示例,我需要定义两次名称。一次在属性中,一次在类本身中。有没有办法避免这种重复?

我需要两者,因为有时,我会遍历程序集以查找所有使用MyAttribute的类并列出它们(带有名称)。其他时候,我可以访问实例化的对象,所以我不想使用该属性。

4

2 回答 2

2

如果可以将名称放入字符串常量中,那么您可以将该常量用于属性参数和属性的返回值。

如果您需要更改名称,只需更改 const 值。

[MyAttribute(MyClass.MyClassName)]
public MyClass
{
    private const string MyClassName = "Test123";

    public string Name 
    {
       get { return MyClass.MyClassName; }
    }
}
于 2012-07-30T18:29:58.960 回答
1

像下面这样的东西可能会起作用。不过,这将是非常低效的。注意,我没有测试下面的代码,但它应该很接近。

[MyAttribute(Name = "Test123"]
public MyClass
{
    public string Name 
    {
       get { return ((MyAttribute)(GetType().GetCustomAttributes(typeof(MyAttribute), true).First())).Name; }
    }
}

为什么你首先需要一个属性和一个属性?您需要两者的事实,特别是因为 Name 属性是“静态的”(附加到类型)并且属性是实例,所以闻起来是错误的。

于 2012-07-30T18:06:36.437 回答