我正在做一个项目。我这里有情况。我有类似名称的数组考虑arr1
, arr2
,arr3
等。
现在我知道我应该使用的数组号 let it be 2
。c#中有什么方法可以通过字符串动态生成数组名称并使用它。就像在 Flash 动作脚本中一样,我们可以做
_root["arr"+i][0]
这里 i 包含要使用的数组编号。
我正在做一个项目。我这里有情况。我有类似名称的数组考虑arr1
, arr2
,arr3
等。
现在我知道我应该使用的数组号 let it be 2
。c#中有什么方法可以通过字符串动态生成数组名称并使用它。就像在 Flash 动作脚本中一样,我们可以做
_root["arr"+i][0]
这里 i 包含要使用的数组编号。
不 - 您不能动态访问变量名称。您可以使用反射来动态访问属性,但不能使用变量。我会使用List<int[]>
这样的:
List<int[]> arrList = new List<int[]> {arr1, arr2, arr3);
int[] arr = arrList[i-1]; // since lists and arrays use 0-based indexes
您可以使用字典:
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)];
使用列表执行动态操作
正如其他答案中所建议的那样,实现您正在寻找的动态的方法是将所有数组放入一个集合(List<int[]>
)中,然后您可以编写更通用的代码,对给定数组的内容进行操作,而无需知道它是哪个数组在编译时运行。
你想要的是 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 循环中的表达式,它就像您要求的那样。