2012-03-27 46 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 [] { ... }); 
相关问题