对于这个奇怪的问题标题感到抱歉,但我真的不知道该怎么称呼它。这对我来说毫无意义。这是代码:
public partial class ParameterPanel : FlowLayoutPanel
{
...
public void SetContents(IEnumerable<IParameter> parameters)
{
if (parameters == null || !parameters.Any())
return;
SuspendLayout();
Controls.Clear();
foreach (IParameter parameter in parameters)
{
Control control = Factory.Create(parameter);
Controls.Add(control);
}
Console.WriteLine("???");
ResumeLayout(false);
PerformLayout();
}
}
奇怪的是,代码有时永远不会到达Console.WriteLine
我在方法的开头打破并尝试逐步执行它。它进入foreach循环,但在最后一项之后,该方法只返回??它永远不会达到Console.WriteLine
。我只是不明白......这怎么可能呢?最奇怪的是,它也不会发生。但它确实发生了这种情况。
任何人都知道这里发生了什么?我甚至不知道从哪里开始寻找这个bug。
答案 0 :(得分:4)
如果方法中的某些内容抛出异常,则会跳过该方法的其余部分。
点击Debug-&gt;例外并勾选CLR异常的框,以便在抛出异常时立即中断VS.
答案 1 :(得分:1)
一个奇怪的是:如果parameters
为空或空,你永远不会恢复或执行布局......我知道这不是你遇到的情况,但是需要修复。
另一种可能性是在循环中的某处抛出异常。
答案 2 :(得分:0)
添加检查是否已成功创建控件,如果没有,则跳过添加。
foreach (IParameter parameter in parameters)
{
Control control = Factory.Create(parameter);
if (control!=null) {
Controls.Add(control);
}
}
答案 3 :(得分:0)
可能是foreach中发生的异常,请尝试检查Debug-&gt; Exceptions-&gt;公共语言运行时异常,看是否有任何异常
答案 4 :(得分:0)
正如Jon Skeet所说,行 -
if (parameters == null || !parameters.Any()) return;
正在返回该函数,所以在这种情况下,你永远不会再进一步了。在方法的开头强制执行这种契约是很常见的,但在这种情况下你通常会抛出异常。