我想给下面的属性分配一个字符串属性。
[ExtractKeyAttribute(**"Extraction"**)]
public class Extract
{
....
}
所以提取是我的字符串,但我不想硬编码到那里。有没有更好的方法来分配?
你不能这样做。
属性值必须是常量表达式,这些值被嵌入到编译代码中。如果你不想使用常量表达式,就不能使用属性...你可能也不应该使用它。这可能意味着当你应该使用其他方法时,你正在使用属性。
你可能想阅读Eric Lippert关于属性和特性的博客文章。
当然,你不一定要在那里使用字符串字面值。你可以有:
[ExtractKey(ExtractionKeys.Extraction)]
...
public static class ExtractionKeys
{
public const string Extraction = "Extraction";
}
...但它仍然是编译时常量。
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";
KeyName
属性并将其放置在属性上,那么无论是谁在进行提取,都可以查找类的属性中的KeyName
属性,然后从具有该属性的任何属性中获取键的名称。这样说通了吗? - Chris Nielsen