我想将属性字符串分配给以下属性。如何将属性分配给属性
[ExtractKeyAttribute(**"Extraction"**)]
public class Extract
{
....
}
所以提取是我的字符串,但我不想硬代码到那里。任何建议更好的方式分配
我想将属性字符串分配给以下属性。如何将属性分配给属性
[ExtractKeyAttribute(**"Extraction"**)]
public class Extract
{
....
}
所以提取是我的字符串,但我不想硬代码到那里。任何建议更好的方式分配
你不能这样做。
属性值必须是常量表达式。这些值被烘焙到编译后的代码中。如果你不想使用一个常量表达式,你不能使用一个属性......而你可能不应该使用这个属性。这可能意味着当你应该使用不同的方法时你正在使用属性。
您可能想要阅读Eric Lippert的properties vs attributes的博客文章。
当然,你不必在那里使用字符串。你可以有:
[ExtractKey(ExtractionKeys.Extraction)]
...
public static class ExtractionKeys
{
public const string Extraction = "Extraction";
}
...但它仍然是一个编译时常量。
感谢您的及时回复,并让我检查通过链接 – user1990395 2013-05-01 14:21:46
@ user1990395:恐怕我不知道你的意思。请澄清您的评论,我可以回答。 – 2013-05-01 14:25:01
为了完整起见,避免使用硬文本的另一个常用(-ish)选项是对属性进行子类化,以便子类可以在运行时以常规代码解析实际值。 – 2013-05-01 14:25:03
在你的评论中,你说你有一个静态类中的所有(字符串)值。你的静态类是只读属性吗?我的意思是,值是否改变?如果不是,用静态字符串值替换静态类中的一些属性。 U可以使用这些值来设置您的属性。
所以......
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";
你可以把属性本身吗? – 2013-05-01 14:19:19
如何调用什么?它看起来像你有一个属性,它定义了什么应该被提取为一个关键,对吗?所以,如果你有'KeyName'属性并将它放在属性上,那么无论提取什么东西都可以在类的属性上查找你的'KeyName'属性,然后从哪个属性获取该属性的关键字名称。那有意义吗? – 2013-05-01 14:26:43
@ChrisNielsen是的,这是合理的队友...我已经给const字符串和分配给属性。 – user1990395 2013-05-01 14:37:54