2013-05-01 103 views
5

我想將屬性字符串分配給以下屬性。如何將屬性分配給屬性

[ExtractKeyAttribute(**"Extraction"**)] 

public class Extract 
{ 
    .... 
} 

所以提取是我的字符串,但我不想硬代碼到那裏。任何建議更好的方式分配

+0

你可以把屬性本身嗎? – 2013-05-01 14:19:19

+0

如何調用什麼?它看起來像你有一個屬性,它定義了什麼應該被提取爲一個關鍵,對嗎?所以,如果你有'KeyName'屬性並將它放在屬性上,那麼無論提取什麼東西都可以在類的屬性上查找你的'KeyName'屬性,然後從哪個屬性獲取該屬性的關鍵字名稱。那有意義嗎? – 2013-05-01 14:26:43

+0

@ChrisNielsen是的,這是合理的隊友...我已經給const字符串和分配給屬性。 – user1990395 2013-05-01 14:37:54

回答

13

你不能這樣做。

屬性值必須是常量表達式。這些值被烘焙到編譯後的代碼中。如果你不想使用一個常量表達式,你不能使用一個屬性......而你可能不應該使用這個屬性。這可能意味着當你應該使用不同的方法時你正在使用屬性。

您可能想要閱讀Eric Lippert的properties vs attributes的博客文章。

當然,你不必在那裏使用字符串。你可以有:

[ExtractKey(ExtractionKeys.Extraction)] 
... 


public static class ExtractionKeys 
{ 
    public const string Extraction = "Extraction"; 
} 

...但它仍然是一個編譯時常量。

+0

感謝您的及時回覆,並讓我檢查通過鏈接 – user1990395 2013-05-01 14:21:46

+0

@ user1990395:恐怕我不知道你的意思。請澄清您的評論,我可以回答。 – 2013-05-01 14:25:01

+0

爲了完整起見,避免使用硬文本的另一個常用(-ish)選項是對屬性進行子類化,以便子類可以在運行時以常規代碼解析實際值。 – 2013-05-01 14:25:03

0

在你的評論中,你說你有一個靜態類中的所有(字符串)值。你的靜態類是隻讀屬性嗎?我的意思是,值是否改變?如果不是,用靜態字符串值替換靜態類中的一些屬性。 U可以使用這些值來設置您的屬性。

所以......

static class MyClass 
{ 
    public string MyValue {get;} 
} 

將成爲:

static class MyClass 
{ 
    public const string MyValue= "MyValue"; 
} 

現在你的屬性可以設置如下:

[ExtractKey(MyClass.MyValue)] 
0

如果要修改的屬性您屬性在運行時,那麼你可以用這個代碼做到這一點:

ExtractKeyAttribute myAttribute = typeof(Extract).GetCustomAttributes(typeof(ExtractKeyAttribute), false)[0] as ExtractKeyAttribute; 
myAttribute.MyValue = "MyRunTimeValue"; 
相關問題