编辑:查看底部的原因是为什么会发生这种情况
我有一个非常奇怪的IndexOutOfRangeException(如标题中所述).当我使用foreach迭代控件的控件(递归FindControl)时会发生这种情况.

然后我想添加一个额外的检查,确保root.Controls.Count > 0.但是我一直得到异常,而调试器清楚地说Count == 0.

有问题的根是FormView.如果有人有任何想法为什么简单的属性检查抛出IndexOutOfRangeException,请赐教!
异常stackTrace(是的,它是完整的):
at System.ComponentModel.BaseNumberConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value)
Run Code Online (Sandbox Code Playgroud)
码:
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;
}
Run Code Online (Sandbox Code Playgroud)
编辑:
我试图使用本机FindControl函数,这会引发相同的错误.
具体问题:
foreach如何在本机集合上抛出IndexOutOfRangeException.
EDIT2:
不知怎的,这似乎与使用ObjectDataSource有关,我没有正确填写输入参数,但我没有得到任何错误.也许这会以某种方式破坏FormView(即使用该数据源).我仍然有兴趣知道在访问childcontrols之前如何在没有错误的情况下发生这种情况.
但是,我正在尝试创建一个可以替换它的正则表达式函数:
while (fname.Contains(".."))
{
fname = fname.Replace("..", ".");
}
if (fname.StartsWith(".")) {
fname= fname.Remove(0, 1);
}
fname = fname.Replace("&", "_");
fname = fname.Replace("#", "_");
fname = fname.Replace("{", "_");
fname = fname.Replace("}", "_");
fname = fname.Replace("%", "_");
fname = fname.Replace("~", "_");
fname = fname.Replace("?", "_");
Run Code Online (Sandbox Code Playgroud)
我根本就没有得到如何编写将为我解决这个问题的正则表达式.任何人都可以帮我一把吗?
当我试图迭代IEnumerable类型时,我很少知道for循环的性能发生了什么.
以下是导致严重性能问题的代码
foreach (IEdge ed in edcol)
{
IEnumerable<string> row =
from r in dtRow.AsEnumerable()
where (((r.Field<string>("F1") == ed.Vertex1.Name) &&
(r.Field<string>("F2") == ed.Vertex2.Name))
|| ((r.Field<string>("F1") == ed.Vertex2.Name) &&
(r.Field<string>("F2") == ed.Vertex1.Name)))
select r.Field<string>("EdgeId");
int co = row.Count();
//foreach (string s in row)
//{
//}
x++;
}
Run Code Online (Sandbox Code Playgroud)
上层foreach(eddge中的IEdge)大约需要11000次迭代才能完成.如果我删除该行,它会在几分之一秒内运行
int co = row.Count();
Run Code Online (Sandbox Code Playgroud)
从代码.
row.Count()在所有循环中的最大值为10.
如果我取消注释
//foreach (string s in row)
//{
//}
Run Code Online (Sandbox Code Playgroud)
大约需要10分钟才能完成代码的执行.
IEnumerable类型是否有如此严重的性能问题.??