到目前为止,我已经做到了:
List<string[]> VList
foreach (var item in VList)
{
foreach (var b in item)
{
Richtextbox 1 = VList[item][b]?
}
}
我该如何纠正?我要它写列表中包含的所有内容
答案 0 :(得分:2)
一个foreach
循环使用IEnumerator
1 迭代一个集合 1 。
在每次迭代中,循环变量(在您的情况下为item
和b
)都引用IEnumerator.Current
属性所引用的内容。
方括号[]
用于一种称为indexers的特殊属性。索引器通常在collection 2 中使用,以提供对与该特定索引耦合的集合所拥有的内容的引用。
在使用foreach
循环时,您不需要知道集合中某个元素的索引-实际上,该集合甚至不必支持索引-您已经有了一个通过循环变量对其进行引用。
因此,使用嵌套foreach
循环对类型为List<string[]>
的变量中的字符串进行处理的代码将是这样的:
foreach(var stringArray in VList)
{
foreach(var str in stringArray)
{
// do something with str here...
}
}
如果要使用索引器,请改用for
循环:
for(var i=0; i<VList.Count; i++)
{
for(var j=0; j<VList[i].Length; j++)
{
// do something with VList[i][j] here...
}
}
GetEnumerator()
,该方法返回一个对象,该对象具有一个名为Current
的公共属性和一个名为MoveNext
的公共方法。
这意味着,即使您有一个没有实现IEnumerable
接口但具有GetEumerator
方法的类,并且该方法返回的其他类的实例也没有实现{{1 }}接口,但具有IEnumerable
属性和Current
方法,您仍然可以使用MoveNext
。这称为duck typing。
这已记录在foreach, in (C# reference)
中
foreach
。
答案 1 :(得分:1)
您的访问权限有误。您正在遍历元素,无需使用数组/索引器访问。 []
List<string[]> VList
foreach (var item in VList)
{
foreach (var b in item)
{
Richtextbox1.text += b
}
}