编辑:会在底部查看发生这种情况的中间原因
我有一个非常奇怪的IndexOutOfRangeException(如标题中所述)。当我使用foreach迭代控件的控件(递归FindControl)时,就会发生这种情况。
然后,我想添加一个额外的检查来确保root.Controls.Count > 0
。但是,我不断收到异常,而调试器清楚地显示了Count == 0
。
所讨论的根是FormView。如果有人对为什么简单的属性检查会引发IndexOutOfRangeException有任何想法,请赐教!
异常stackTrace(是的,它是完整的):
at System.ComponentModel.BaseNumberConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value)
代码:
public static Control FindControlRecursive(this Control root, string id)
{
if (root.ID == id)
{
return root;
}
if (root.Controls.Count > 0)
{
foreach (Control c in root.Controls)
{
Control t = c.FindControlRecursive(id);
if (t != null)
{
return t;
}
}
}
return null;
}
编辑:
我尝试使用 native 的
FindControl
函数,这将引发相同的错误。具体问题:
foreach如何在 native 集合上抛出IndexOutOfRangeException。
编辑2:
某种程度上,这似乎与使用ObjectDataSource有关,我没有正确填写inputparameters,但是在那里没有出现任何错误。也许这以某种方式破坏了FormView(正在使用该数据源)。我仍然很想知道在访问子控件之前如何在不引发错误的情况下发生这种情况。
最佳答案
尝试使用Control.HasControls()而不是Controls.Count可能会解决此问题。