1

我正在做一个项目。我这里有情况。我有类似名称的数组考虑arr1, arr2,arr3等。

现在我知道我应该使用的数组号 let it be 2。c#中有什么方法可以通过字符串动态生成数组名称并使用它。就像在 Flash 动作脚本中一样,我们可以做

_root["arr"+i][0]

这里 i 包含要使用的数组编号。

4

5 回答 5

2

不 - 您不能动态访问变量名称。您可以使用反射来动态访问属性,但不能使用变量。我会使用List<int[]>这样的:

List<int[]> arrList = new List<int[]> {arr1, arr2, arr3);
int[] arr = arrList[i-1];   // since lists and arrays use 0-based indexes
于 2013-08-29T16:47:08.413 回答
1

您可以使用字典:

        var dictionary = new Dictionary<string, int[]>();
        dictionary.Add("array1", arr1);
        dictionary.Add("array2", arr2);
        dictionary.Add("array3", arr3);

        var arr = dictionary[string.Format("array{0}", i)];
于 2013-08-29T16:58:36.667 回答
0

使用列表执行动态操作

于 2013-08-29T16:44:03.930 回答
0

正如其他答案中所建议的那样,实现您正在寻找的动态的方法是将所有数组放入一个集合(List<int[]>)中,然后您可以编写更通用的代码,对给定数组的内容进行操作,而无需知道它是哪个数组在编译时运行。

于 2013-08-29T16:54:17.567 回答
0

你想要的是 JavaScript 或动态语言所拥有的东西,但它们的数组类型是相当关联的数组。要达到您想要的功能,您可以使用 Dictionary:

    var arr1 = new int[] { 0, 1, 2, 3 };
    var arr2 = new int[] { 0, 1, 2, 3 };
    var arr3 = new int[] { 0, 1, 2, 3 };

    var _root = new Dictionary<string, int[]>();
    _root.Add("arr1", arr1);
    _root.Add("arr2", arr2);
    _root.Add("arr3", arr3);

    for (int i = 1; i <= 3; i++)
    {
      int arrElem = _root["arr" + i][0];
    }

请注意 for 循环中的表达式,它就像您要求的那样。

于 2013-08-29T17:34:48.020 回答