2014-07-17 47 views
0

我正在爲使用C#和XAML的Windows創建一種接口生成器,並且想知道是否可以從字符串中創建變量名稱(Label label_string =「Something」;) 。例如,每次創建新標籤時,變量都將被命名爲{label1,label2,label3,...}。我正在考慮創建一組標籤並更改每個標籤的Name屬性,但是我想知道我的其他想法是否可行。使用字符串創建變量名稱

+0

動態編譯的代碼可能會幫助你...... – Darek

+0

只是一個簡單的問題,如果我不選擇動態編譯代碼我的其他數組方法的工作?就在我付出努力之前。每次創建新變量時,該方法是否需要完整重新編譯並鏈接? – Kinggadino

+0

你可以用'Dictionary '來模擬,並用它作爲你的「內存」。您可以創建一個與您的初始思想非常相似的語義類。 – Mephy

回答

1

簡短的回答是否定的。如果你想堅持使用CLR和強類型對象,那麼這些對象定義在編譯時間,並且之後它們的定義不能被改變。

現在,如果你想變得更復雜,有辦法使用反射來做到這一點,併發布新的IL/Wrapper類,以及類似的東西。還有DLR,您可以在其中使用動態對象(ala Javascript),其中定義的對象定義爲運行時間而不是編譯時間。但是,對於你想要做的事情,這可能比維護一組Label控件更爲複雜和低效,因爲你可以在其中更改Name屬性,如上所述。

UPDATE

這是出的範圍的SO回答,試圖解釋你如何能真正做到這一點,因爲它是非常複雜的。但是如果你有興趣,你可以研究幾種方法。

其中之一是實際生成c#代碼並在運行時通過編譯器運行,然後動態加載該程序集。快速Bing!搜索打開了這個鏈接,描述了這樣的事情:http://support.microsoft.com/kb/304655

另一種方法是使用System.Reflection.Emit命名空間來發出CIL指令以構建內存組合。再次,快速Bing!搜索出現了這個鏈接,它談到了這樣的事情:http://msdn.microsoft.com/en-us/library/3y322t50(v=vs.110).aspx

注意:上述鏈接並不精確地解釋你如何要求,但他們給你一個關於方法的想法,你會需要做更多的研究來弄清楚如何使它適合你的特定場景。

+0

這只是一個快速有趣的程序,不是一個專業的程序,雖然我知道它最好使用良好的做法,我不介意它是否有點低效。 – Kinggadino

+0

@Kinggadino查看我的更新 – CodingGorilla

+0

好吧,我看看我的另一臺電腦上的msdn網站,因爲它似乎無法連接,因爲某些原因,這很奇怪,因爲它今天早上工作;謝謝您的幫助! – Kinggadino