C#:为什么忽略这段代码?

时间:2009-09-14 10:13:41

标签: c# winforms

对于这个奇怪的问题标题感到抱歉,但我真的不知道该怎么称呼它。这对我来说毫无意义。这是代码:

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。

5 个答案:

答案 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;

正在返回该函数,所以在这种情况下,你永远不会再进一步​​了。在方法的开头强制执行这种契约是很常见的,但在这种情况下你通常会抛出异常。