编辑:看看底部为什么会发生这种情况
我有一个非常奇怪的 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;
}
编辑:
我尝试使用本机FindControl函数,这会引发相同的错误。
具体问题:
foreach 如何在本机集合上抛出 IndexOutOfRangeException。
编辑2:
不知何故,这似乎与使用 ObjectDataSource 有关,我没有正确填写输入参数,但我没有得到任何错误。也许这以某种方式破坏了 FormView(使用该数据源)。我仍然很想知道如何在访问子控件之前不抛出错误的情况下发生这种情况。