簡體   English   中英

C#如何使用字符串引用具有相同名稱的預先存在的變量?

[英]C# How can I used a string to reference a pre-existing variable by the same name?

我有一個文本文件,每一行上都是一個單詞,后跟特定的值

例如:

texture_menu_label_1 = 0 0 512 512

我想做的是讀入該文本並將其基本上轉換為以下命令:

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

解析行並為構造函數提取整數值是微不足道的,但是我想知道是否仍然可以使用文件中的“ texture_menu_label_1”字符串來引用同名的預先存在的變量...

無論如何,無需手動構造查找表就能做到這一點?

您真的不想這樣做。 我知道您認為您確實如此,我記得我在學習編程的時候也曾想過同樣的事情,但實際上,您沒有。

有更好的方法來存儲集合值,在您的情況下,這將是一個多維數組(或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"

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

我建議使用字典按名稱將數據存儲為字符串。

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 [] { ... });

使用HashTable(通用字典)。 密鑰將是字符串(texture_menu_label_1),而值將是數組。

如果將其包裝在結構中怎么辦?

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

然后,您不必處理任何一種類型,而只需處理該結構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM