微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 使用foreach的IndexOutOfRangeException

编辑:查看底部的原因是为什么会发生这种情况

我有一个非常奇怪的IndexOutOfRangeException(如标题中所述).当我使用foreach迭代控件的控件(递归FindControl)时会发生这种情况.

然后我想添加一个额外的检查,以确保root.Controls.Count>但是我一直得到异常,而调试器清楚地说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.

EDIT2:

不知怎的,这似乎与使用ObjectDataSource有关,我没有正确填写输入参数,但我没有得到任何错误.也许这会以某种方式破坏FormView(即使用该数据源).我仍然有兴趣知道在访问childcontrols之前如何在没有错误的情况下发生这种情况.

解决方法

而不是Controls.Count,尝试使用 Control.HasControls(),可能会解决问题.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐