2012-03-27 22 views
1

我有一個文本文件,並在每一行是一個字,接着特定值C#我如何使用一個字符串來引用一個預先存在的變量相同的名稱?

例如:

texture_menu_label_1 = 0 0 512 512 

我想要做的是閱讀中的文本,基本上把它轉換成以下條命令:

texture_menu_label_1 = new int[]{0, 0, 512, 512}; 

解析線和構造是微不足道提取整數的值,但即時知道是否有無論如何使用「texture_menu_label_1」字符串從文件引用一個預先存在的VARI能夠以相同的名字...

有沒有辦法做到這一點,而無需手動構建查找表?

+1

這將更好地實施使用多維數組:更快,更安全,更容易維護,... – 2012-03-27 23:46:22

回答

4

你真的不想這樣做。我知道你認爲你是這樣做的,我記得當我正在學習如何編程時,我想到了同樣的事情,但是真的,你不知道。

有更好的方法來存儲集合值,在你的情況下,這將是一個多維數組(或一個List<List<int>>)。如果不是這樣,那麼可能是一個散列表(Dictionary<string,int[]>)。

更好的是,如果此數據是「常規」且邏輯連接的,請創建您自己的自定義類型並保留這些類型的集合。你真的不想把你的邏輯與變量的名字聯繫起來......非常混亂。

該數據看起來像一個矩形。爲什麼不只是維護一個Dictionary<string,Rectangle>

var dict = new Dictionary<string, Rectangle>(); 
dict.Add("some_name", new Rectangle(0, 0, 512, 512)); 
// ... later 
var rect = dict["some_name"]; // get the rectangle that maps to "some_name" 
1

使用HashTable(泛型字典)或類似的。關鍵是字符串(texture_menu_label_1),值將是數組。

0

如果你把它包裝在一個結構體中怎麼辦?

struct TextureMenu 
{ 
    string MenuString; 
    int[] Values; 
} 

然後,而不是直接處理任何一種類型,你只是處理結構。

2

在您嘗試實施答案之前,請考慮您爲什麼要這樣做,以及是否有更好的解決方案。

我推薦使用Dictionary來按字符串名稱存儲數據。

dataDictionary["texture_menu_label_1"] = new int[] { ... }; 

另一種方法是使用帶字段的單獨類,因爲字段可以按名稱訪問。儘管您可能會遇到性能問題,但它絕對不是最佳解決方案。

class Data 
{ 
    public int[] texture_menu_label_1; 
    ... 
} 

您可以使用反射設置字段值。像這樣:

typeof(Data).GetField("texture_menu_label_1").SetValue(data, new int [] { ... }); 
相關問題