c#停止库内的代码执行

时间:2016-09-01 22:20:23

标签: c# php winforms

我想通过调用函数而不是return来尝试在C#Winforms中弄清楚是否有可能停止代码执行。

PHP中可以使用以下代码

if($something == null)
   $this->response->error(0);

// This code is never executed if the condition is true
echo 'Hello';

图书馆response有类似的内容:

public class Response
{
   public function error($index)
   {
     $response = array();

     switch ($index)
     {
        case 0: $response = array('msg' => 'fields missing..'); break;
     }

     // The trick is here
     exit(json_encode($response));
   }
}

所以,在C#项目中,在我的表单中,我用这样的方式调用response库:

private void button1_Click(object sender, EventArgs e)
{
    libraries.Response Response = new libraries.Response();

    if(textBox1.Text == "")
        Response.error(0);

    // The code continues to get executed even if the condition is true
    button2.PerformClick();
}

响应会触发MessageBox,显然没有什么可以阻止代码执行。

class Response
{
    public void error(int index)
    { 
        string msg = "";

        switch (index) 
        {
            case 0: msg = "Fields missing.."; break;
        }

        MessageBox.Show(msg, "My app", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

现在,我知道我可以使用return,因为下面的代码显示停止代码执行,但我想知道是否还有其他东西我可以放入库中{{1}那可以做到的伎俩?

response

2 个答案:

答案 0 :(得分:1)

在.NET中,在特殊情况下停止执行代码,可以抛出异常。这样,throw语句之后的代码行将不会执行,异常将冒出堆栈,直到与特定异常类型匹配的第一个try-catch和catch块的代码将执行。如果在调用堆栈中找不到合适的try-catch块,则该过程将终止并向用户显示一条消息。

  

不应将异常用于更改程序的流程作为一部分   普通的执行。例外只应用于报告和   处理错误条件。

要抛出Exception,您可以使用throw语句。例如:

public string GetObjectTypeName(object something)
{
    if(something==null)
        throw new Exception("Some Exception Message");

    return something.GetType().Name;
} 

有关更多信息,请查看以下资源:

答案 1 :(得分:0)

您也可以使用else子句:

if(textBox1.Text == "")
{
   Response.error(0);
}
else
{
    button2.PerformClick();
}

但是如果你没有抛出错误,使用goto声明并且不想使用很多if-elses,那么return是你的选择。

修改

使调用者方法停止执行的唯一选择是我能想到的(除了完全关闭你的应用程序之外)调用的方法是抛出Exception