我想为下面的属性分配一个属性字符串。
[ExtractKeyAttribute(**"Extraction"**)]
public class Extract
{
....
}
所以提取是我的字符串,但我不希望将硬代码放入其中。有关更好分配方式的任何建议
你不能这样做。
属性值必须是常量表达式。这些值被烘焙到编译的代码中。如果您不想使用常量表达式,则不能使用属性......而且您可能不应该使用。这可能意味着当您应该使用不同的方法时,您正在使用属性。
您可能想阅读 Eric Lippert 关于properties 与 attributes的博客文章。
当然,您不必在那里使用字符串文字。你可以有:
[ExtractKey(ExtractionKeys.Extraction)]
...
public static class ExtractionKeys
{
public const string Extraction = "Extraction";
}
...但它仍然是一个编译时常量。
在您的评论中,您说您在静态类中有所有(字符串)值。您的静态类是具有只读属性的类吗?我的意思是,价值观会改变吗?如果不是,请将静态类中的一些属性替换为 const 字符串值。你可以使用这些值来设置你的属性。
所以...
static class MyClass
{
public string MyValue {get;}
}
会成为:
static class MyClass
{
public const string MyValue= "MyValue";
}
现在您的属性可以设置如下:
[ExtractKey(MyClass.MyValue)]
如果您想在运行时修改属性的属性,则可以使用以下代码执行此操作:
ExtractKeyAttribute myAttribute = typeof(Extract).GetCustomAttributes(typeof(ExtractKeyAttribute), false)[0] as ExtractKeyAttribute;
myAttribute.MyValue = "MyRunTimeValue";