我想将属性字符串分配给以下属性。
[ExtractKeyAttribute(**"Extraction"**)]
public class Extract
{
....
}
所以提取是我的字符串,但我不想要硬编码。有关更好的分配方式的任何建议
答案 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";