繁体   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