我想通过调用函数而不是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
答案 0 :(得分:1)
在.NET中,在特殊情况下停止执行代码,可以抛出异常。这样,throw语句之后的代码行将不会执行,异常将冒出堆栈,直到与特定异常类型匹配的第一个try-catch
和catch块的代码将执行。如果在调用堆栈中找不到合适的try-catch块,则该过程将终止并向用户显示一条消息。
不应将异常用于更改程序的流程作为一部分 普通的执行。例外只应用于报告和 处理错误条件。
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
。