动态访问数组

时间:2013-08-29 16:41:22

标签: c# arrays visual-studio-2012

我正在开展一个项目。我在这里有一个情况。我有类似名称的数组考虑arr1arr2arr3等。

现在我知道我应该使用的数组编号,让它为2。在c#中是否有任何方法可以通过字符串动态生成数组名称并使用它。 就像在Flash动作脚本中我们可以做的那样

_root["arr"+i][0]

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

5 个答案:

答案 0 :(得分: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

答案 1 :(得分: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)];

答案 2 :(得分:0)

使用列表执行动态操作

答案 3 :(得分:0)

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

答案 4 :(得分:0)

你想要的是JavaScript或动态语言所拥有的东西,但它们的数组类型却是相关的数组。要获得所需的功能,您可以使用词典:

    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循环中的表达式,就像你要求的那样。