Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# foreach循环C中的双零索引#_C#_Foreach - Fatal编程技术网

C# foreach循环C中的双零索引#

C# foreach循环C中的双零索引#,c#,foreach,C#,Foreach,这是我目前遇到的一个非常奇怪的问题。 我的代码中有一个中继器,我在其中填充了数据。这是工作的预期 在我的中继器上,我得到了一个如下的数据绑定: <asp:Repeater ID="repeater" Visible="true" runat="server" OnItemDataBound="getOverlays"> <ItemTemplate> <span><%#Eval("name") %></span> <

这是我目前遇到的一个非常奇怪的问题。 我的代码中有一个
中继器
,我在其中填充了数据。这是工作的预期

在我的中继器上,我得到了一个如下的数据绑定:

<asp:Repeater ID="repeater" Visible="true" runat="server" OnItemDataBound="getOverlays">
  <ItemTemplate>
    <span><%#Eval("name") %></span>
  </ItemTemplate>
</asp:Repeater>
在我的世界里,这空虚会写出来

0
1
2
但现在这行代码写出

0
0
1
这对我来说是一个很大的谜!以前有人遇到过这样的问题吗?我做错了什么

我清楚地看到了我的数据源的3个名称,我得到了三个索引,前两个索引得到了相同的索引,即0

我的索引在第一次迭代后被重置了,但我以前从来没有遇到过这个问题,有人找到了解决方案,或者可以告诉我为什么我的索引被扭曲了

提前谢谢你。

OnItemDataBound在每个项都是数据绑定后调用,而不是在绑定所有数据时调用。我认为你对这件事的理解是错误的


所以第一个循环没有项目,第一个项目之后是0,然后是0,1。您必须对此进行调试,以查看它正在执行的操作,但这似乎是问题所在。

您不应在OnItemDataBound事件中循环,它会为每个项目自动调用一次。相反,您应该使用
e.Item.ItemIndex
。可能是第一次调用,
Repeater.Items
没有项目。第二次,有一个项目(索引=0)。第三次,它有两个项目(索引0和1)


引用:

为绑定的每个项触发OnItemDataBound事件。所以你应该做下面的事情

protected void getOverlays(object sender, RepeaterItemEventArgs e) {
    Response.Write(e.Item.ItemIndex);
}

span中的第一个代码段输出什么?(实际产出)阿尔菲;它输出正确的值,这就是为什么我感到困惑的原因,因为在看到OnItemDataBound中的索引之前,一切都是正确的。对于添加到repeater的每个项,都会调用OnItemDataBound方法,我相信这是在将项添加到Items集合之前。有三个项目,它将被调用三次。第一次调用时,集合为空。第二次调用时,它包含一项(索引0),第三次调用时,它包含两项(索引0和1)。您想完成什么?谢谢,是的,可能是因为我已经有一段时间没有使用中继器了,并且手动完成了数据集上的大多数迭代。但是是的,问题的结果是我在一个已经进行了foreach的循环上进行了foreach,谢谢你的澄清。彼得B:你的帖子让我意识到了这一点,但也感谢詹姆斯·德夫指出了这一点,你们两人都给出了正确的答案。TYVM
protected void getOverlays(object sender, RepeaterItemEventArgs e) {
    Response.Write(e.Item.ItemIndex);
}