我想將屬性字符串分配給以下屬性。如何將屬性分配給屬性
[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