for (int z = 0; z < alParmValues.Count; z++)
{
//string[] def;
string[] asd = alParmValues[z].ToString().Split(',');//this is of type string.collections and u cant cast it to a arraylist or array
//if (HUTT.clsParameterValues.bCustomObj == false)
string[] def = alMethSign[z].ToString().Substring(alMethSign[z].ToString().IndexOf('(') + 1, alMethSign[z].ToString().IndexOf(')') - (alMethSign[z].ToString().IndexOf('(') + 1)).Split(',');
}
我必须访问循环外的两个字符串数组。有更好的解决方案吗?我不能使用ArrayList或将它们声明为public,那么我该如何访问它们呢?
答案 0 :(得分:7)
要访问循环之外的东西,只需在循环之外声明它,然后在循环处理完成后使用它:
string[] arr = ...
for (int z = 0; z < alParmValues.Count; z++)
{
// work with arr...
}
var item = arr[3]; // Accessed outside of loop.
但是,您的代码似乎有些问题。我建议稍微考虑一下循环体和你想要做的事情。考虑这一行,例如:
for (int z = 0; z < alParmValues.Count; z++)
{
// ...
string[] asd = alParmValues[z].ToString().Split(',');
// There aren't any more references to asd after this point in the loop,
// so this assignment serves no purpose and only keeps its last assigned
// value.
}
这项任务毫无意义;每次进行循环时,只需覆盖asd
的先前值,并且以后再也不会在循环中使用它。
答案 1 :(得分:2)
asd
和def
的范围仅限于for
循环的正文。如果必须访问它们,则需要在循环外声明它们。把它们拿出来有问题吗?
查看MSDN上的Collection Classes Tutorial。
答案 2 :(得分:0)
'asd'和'def'都是字符串数组,其范围仅限于for循环。您无法在循环外访问它们。如果您想这样做,请尝试在for循环外声明它们。
答案 3 :(得分:0)
首先,如果要访问循环内提取/计算的数据,则必须为结果外部循环声明一个容器,然后在中填充其值 >循环。
其次,不要考虑强制转换从split
方法返回的数组,而是考虑处理其内容。
假设您希望在一对结果中得到原始alParmValues
数组的所有元素的组合结果,我会使用类似下面的伪代码。当然,您需要填写alParmValues
和alMethSign
元素的类型,添加分号等。(因为您的问题没有解释正在处理的两个数组之间的内容和关系在你的循环中,我只是对它们进行了独立处理。)这不是完整的代码,只是一个草图来帮助你开始:
ArrayList allValues = new ArrayList()
foreach (??? parameter in alParmValues) {
foreach (String value in parameter.ToString().Split(',')) {
allValues.add(value)
}
}
ArrayList allMethSignValues = new ArrayList()
foreach (??? methSign in alMethSign) {
String thisString = methSign.toString()
int open = thisString.indexOf('(')
int close = thisString.indexOf(')')
String parenPart = thisString.substring(open + 1, close - open - 1)
foreach (String value in parenPart.split(',')) {
allMethSignValues.add(value)
}
}