如何为属性分配属性

时间:2013-05-01 14:17:40

标签: c# .net

我想将属性字符串分配给以下属性。

[ExtractKeyAttribute(**"Extraction"**)]

public class Extract
{
  ....
}

所以提取是我的字符串,但我不想要硬编码。有关更好的分配方式的任何建议

3 个答案:

答案 0 :(得分:13)

你不能这样做。

属性值必须是常量表达式。这些值被编入已编译的代码中。如果您不想使用常量表达式,则不能使用属性...而您可能不应该使用。当您应该使用不同的方法时,这可能意味着您正在使用属性。

您可能希望在properties vs attributes上阅读Eric Lippert的博文。

当然,您不必在那里使用字符串文字。你可以:

[ExtractKey(ExtractionKeys.Extraction)]
...


public static class ExtractionKeys
{
    public const string Extraction = "Extraction";
}

...但它仍然是编译时常量。

答案 1 :(得分:0)

在你的评论中,你说你在静态类中拥有所有(字符串)值。您的静态类是否具有只读属性的类?我的意思是,价值观会发生变化吗?如果没有,请使用const字符串值替换静态类中的某些属性。您可以使用这些值来设置属性。

因此...

static class MyClass
{
     public string MyValue {get;}
}

会变成:

static class MyClass
{
     public const string MyValue= "MyValue";
}

现在您的属性可以设置如下:

[ExtractKey(MyClass.MyValue)]

答案 2 :(得分:0)

如果要在运行时修改属性的属性,则可以使用以下代码执行此操作:

ExtractKeyAttribute myAttribute = typeof(Extract).GetCustomAttributes(typeof(ExtractKeyAttribute), false)[0] as ExtractKeyAttribute;
myAttribute.MyValue = "MyRunTimeValue";