为了账号安全,请及时绑定邮箱和手机立即绑定

C#代码如何实现让后面的代码不执行???

C#代码如何实现让后面的代码不执行???

C#
哆啦的时光机 2018-12-07 11:59:00
A(); public void A() { B(); MessageBox.Show("我是A方法"); } public void B() { C(); MessageBox.Show("我是B方法"); //我想在此处加一些代码,让方法A后面的代码不再执行; } public void C() { MessageBox.Show("我是C方法"); //我想在此处加一些代码,让方法B后面的代码不再执行; } 如上示例代码,当调用A方法时,整个执行顺序是:A->B->C 然后返回:C->B->A 我想实现在B或C代码中,加入一些代码,让返回终止,即:调用到C后,不再返回B,C; 想实现类似ASP.NET Response.End方法一样: Response.Write("aaaa"); Response.End(); Response.Write("bbb"); 我想过几种方案: 1.抛错,这个是可以,但如果A,B,C三个方法中都有try catch,那么就失效,即合实现但也不优雅; 2.AOP,采用代理类,将要执行的代码放到代理方法的执行前与执行后中间,如果不需要后面的执行,则执行前return即可,但最终仍然会回到最开始的调用处A,不行; 3.将ABC三个方法代码封装到不同的类中CA,CB,CC,然后在执行到B时,提前释放类CA,但发现不行。 不知道大家有没有更好的方法,求指点! 之所以需要实现后面的所有代码都不执行,是因为我想减少每个执行代码都做判断,比如: //调用: MessageBox.Show("开始调用"); if (A() == false) return; MessageBox.Show("回到初始调用处的下一行代码"); public bool A() { if (B() == false) return false; MessageBox.Show("我是A方法"); return true; } public bool B() { if (C() == false) return false; MessageBox.Show("我是B方法"); return false; //通过返回flase,让被调用方A自己再判断是否为false,若为false则不执行A后面的代码 } public bool C() { MessageBox.Show("我是C方法"); return true; } 以上改过后的代码,通过层级判断方法的返回结果,来决定每个方法是否执行,少点还可以,但如果项目很多,那么这么多的判断,肯定是非常臃肿的,需要消除。 求大神指点,同时也欢迎大家讨论!!!
查看完整描述

11 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

被调用方不能决定调用方的操作.这是常识.

你说的臃肿是不存在的.调用方不判断返回值这行代码谁看的懂.神仙也不知道这么一行调用后面的就不执行了.

就算你抛异常出去.外面都能接了继续跑.除非你把application结束了.

查看完整回答
反对 回复 2018-12-24
?
慕村225694

TA贡献1880条经验 获得超4个赞

程序由 顺序 判断 循环组成,你就不要在这方面努力了

查看完整回答
反对 回复 2018-12-24
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

是的,努力也无效,最终我放弃这种思路,仍采取我文中最后的方式,每个方法中都增加判断的机制。

虽然重复了一些代码,但这个是最简单,最有效的,也便于理解的。

查看完整回答
反对 回复 2018-12-24
?
动漫人物

TA贡献1815条经验 获得超10个赞

那与我上面的if (C() == false) return false;有什么区别,没有区别,我就是想消除这种重复判断

查看完整回答
反对 回复 2018-12-24
?
慕沐林林

TA贡献2016条经验 获得超9个赞

@梦在旅途: 

没有区别 但是逻辑上可以保持一致 

且这个逻辑 可以只实现一次

查看完整回答
反对 回复 2018-12-24
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

 我还没怎么看懂意思,用线程怎么样,给个标示量,特定的时候直接终止或者挂起线程

查看完整回答
反对 回复 2018-12-24
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

用多线程,确实可以起到终止执行的效果,但会带来许多的不便,比如:线程的同步问题,线程中操作UI控件等问题,虽说都有解决办法,但会将本身简单的方法复杂化,不可取。

查看完整回答
反对 回复 2018-12-24
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

@梦在旅途: Response.End();好像这个就是终止了当前线程,所以你要做到这个效果一般都是针对某一个线程里面的情况。

因为你想让后面的代码不再执行,要不就跳出去(异常或者终止线程),要不就是加多代码去判断。要不然你没要绕过待执行的代码

查看完整回答
反对 回复 2018-12-24
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

@Jimmy.pan: 我意思是 new 一个 Thread  ,然后就可以掌控它随时让他终止、挂起,但对主线程无影响了

查看完整回答
反对 回复 2018-12-24
  • 11 回答
  • 0 关注
  • 1439 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信