Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:为什么忽略此代码?_C#_Winforms - Fatal编程技术网

C#:为什么忽略此代码?

C#:为什么忽略此代码?,c#,winforms,C#,Winforms,很抱歉这个奇怪的问题标题,但我真的不知道该怎么称呼这个。这对我来说毫无意义。代码如下: public partial class ParameterPanel : FlowLayoutPanel { ... public void SetContents(IEnumerable<IParameter> parameters) { if (parameters == null || !parameters.Any())

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

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();
    }
}
公共部分类参数面板:FlowLayoutPanel
{
...
公共void集合内容(IEnumerable参数)
{
if(parameters==null | |!parameters.Any())
返回;
SuspendLayout();
控件。清除();
foreach(参数中的IPParameter参数)
{
控制=工厂创建(参数);
控件。添加(控件);
}
控制台写入线(“???”);
简历布局(假);
执行布局();
}
}
奇怪的是,代码有时从未到达
控制台。它进入foreach循环,但在最后一项之后,该方法只返回??它从未到达
控制台。WriteLine
。我就是不明白。。。这怎么可能呢?最奇怪的是它也不总是发生。但这种情况在实际发生的情况下却始终如一


有人知道这是怎么回事吗?我甚至不知道从哪里开始寻找这个bug

添加检查控件是否已成功创建,如果未成功,则跳过添加

foreach (IParameter parameter in parameters)
{
    Control control = Factory.Create(parameter);
    if (control!=null) {
        Controls.Add(control);
    }
}

添加检查控件是否已成功创建,如果未成功,则跳过添加

foreach (IParameter parameter in parameters)
{
    Control control = Factory.Create(parameter);
    if (control!=null) {
        Controls.Add(control);
    }
}

一个奇怪的现象是:如果
参数
为null或空,则永远不会恢复或执行布局。。。我知道这不是你遇到的情况,但这是需要解决的问题


另一种可能是循环中的某个地方抛出了异常。

一个奇怪的现象:如果
参数为null或空,则永远不会恢复或执行布局。。。我知道这不是你遇到的情况,但这是需要解决的问题


另一种可能性是循环中的某个地方抛出异常。

如果方法中的某个部分抛出异常,则将跳过该方法的其余部分


点击Debug->Exceptions并勾选CLR Exceptions框,以便在抛出异常时立即使其变为中断。

如果方法中的某些内容正在抛出异常,则将跳过该方法的其余部分


点击Debug->Exceptions并勾选CLR Exceptions框,以便在抛出异常时立即启用或禁用。

可能是foreach中发生的异常,请尝试选中Debug->Exceptions->Common language runtime Exceptions,查看是否存在异常。

可能是foreach中发生的异常,试着检查Debug->Exceptions->Common language runtime Exceptions,看看是否有任何异常,正如Jon Skeet所说的-

if (parameters == null || !parameters.Any()) return;

正在返回函数,因此在这种情况下,您将永远无法获得更多。在方法开始时强制执行这种契约是很常见的,但在这种情况下通常会抛出一个异常。

正如Jon Skeet所说,这一行-

if (parameters == null || !parameters.Any()) return;

正在返回函数,因此在这种情况下,您将永远无法获得更多。通常在方法开始时强制执行此类约定,但在这种情况下通常会抛出异常。

是不是Controls.Add()在这一点上失败了?我假设异常会将您踢出方法…啊,grr,找到了。工厂创建的一个控件的构造函数中发生了NullReferenceException。让我感到不快的是,这个异常没有使任何东西崩溃。它只是。。。很显然,这件事发生了,被忽视了。在输出控制台中注意到它。必须在调试->异常中为该异常启用中断功能。。。菜单。哦,好吧。。。我发现寻求帮助通常能确保你自己在几分钟后找到解决方案!:-)很高兴您对其进行了排序。如果调用线程位于应用程序域之外,则默认行为是默默地吞下异常(如果我没有记错,则仅当从visual studio运行应用程序时才会发生)。在将文件拖放到我的应用程序中时,我遇到了一个异常引发的同样问题。Controls.Add()是否会在这一点上失败?我假设一个异常会将您踢出该方法…啊,grr,找到它了。工厂创建的一个控件的构造函数中发生了NullReferenceException。让我感到不快的是,这个异常没有使任何东西崩溃。它只是。。。很显然,这件事发生了,被忽视了。在输出控制台中注意到它。必须在调试->异常中为该异常启用中断功能。。。菜单。哦,好吧。。。我发现寻求帮助通常能确保你自己在几分钟后找到解决方案!:-)很高兴您对其进行了排序。如果调用线程位于应用程序域之外,则默认行为是默默地吞下异常(如果我没有记错,则仅当从visual studio运行应用程序时才会发生)。在将文件拖放到我的应用程序中的过程中,我遇到了一个异常引发的同样问题。哦,没错。谢谢你让我知道!哦,那是真的。谢谢你让我知道!是的,是用那个找到的。但是为什么它一开始就没有破裂呢?我得到的只是“app.dll中发生了'System.NullReferenceException'类型的第一次意外异常”,我不知道它是从哪里被吃掉的。是不是有更高级的东西捕捉到了异常。我注意到您继承了FlowLayoutPanel;是否从某个重写方法捕获集合内容,该方法在处理异常的FlowLayoutPanel中具有调用方?尝试处理AppDomain.CurrentDomain.UnhandledException事件,以查看它是否发生在后台线程上-尽管这看起来像GUI代码,我假设它不在后台线程上。是的,使用它找到它。但是为什么它一开始就没有破裂呢?我得到的只是“app.dll中发生了'System.NullReferenceException'类型的第一次意外异常”,我不明白是什么原因造成的