加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用foreach的IndexOutOfRangeException

发布时间:2020-12-15 05:37:36 所属栏目:百科 来源:网络整理
导读:编辑:查看底部的原因是为什么会发生这种情况 我有一个非常奇怪的IndexOutOfRangeException(如标题中所述).当我使用foreach迭代控件的控件(递归FindControl)时会发生这种情况. 然后我想添加一个额外的检查,以确保root.Controls.Count但是我一直得到异常,而调
编辑:查看底部的原因是为什么会发生这种情况

我有一个非常奇怪的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(),可能会解决问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读