首页 新闻 会员 周边

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

0
悬赏园豆:10 [已解决问题] 解决于 2017-04-21 10:02
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;
        }

以上改过后的代码,通过层级判断方法的返回结果,来决定每个方法是否执行,少点还可以,但如果项目很多,那么这么多的判断,肯定是非常臃肿的,需要消除。

求大神指点,同时也欢迎大家讨论!!!

c#
梦在旅途的主页 梦在旅途 | 初学一级 | 园豆:10
提问于:2017-04-10 13:21
< >
分享
最佳答案
0

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

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

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

收获园豆:5
吴瑞祥 | 高人七级 |园豆:29449 | 2017-04-10 13:24

可能真的无解了,所以我仍然采取每个方法中都增加判断的机制。

梦在旅途 | 园豆:10 (初学一级) | 2017-04-14 10:28
其他回答(4)
0

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

刘宏玺 | 园豆:14020 (专家六级) | 2017-04-10 13:43

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

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

支持(0) 反对(0) 梦在旅途 | 园豆:10 (初学一级) | 2017-04-14 10:29
0

实现通用接口 

在a b c 中加入通用参数对象

以管道的方式顺序执行 在通用参数中加入一个 Isreturn 参数 如果isreturn为 true 后面就不用执行 

 

但是你的代码结构有点问题 最好不要是嵌套结构

小眼睛老鼠 | 园豆:2731 (老鸟四级) | 2017-04-10 15:49

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

支持(0) 反对(0) 梦在旅途 | 园豆:10 (初学一级) | 2017-04-14 10:23

@梦在旅途: 

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

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

支持(0) 反对(0) 小眼睛老鼠 | 园豆:2731 (老鸟四级) | 2017-04-14 11:13
0

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

收获园豆:5
codingHeart | 园豆:1511 (小虾三级) | 2017-04-10 16:33

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

支持(0) 反对(0) 梦在旅途 | 园豆:10 (初学一级) | 2017-04-14 10:24

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

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

支持(0) 反对(0) Jimmy.pan | 园豆:242 (菜鸟二级) | 2017-04-14 10:40

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

支持(0) 反对(0) codingHeart | 园豆:1511 (小虾三级) | 2017-04-14 10:53
0

有c#大神没有,我是个菜鸟,以前还好学的越多 越不会,老师说我是思路问题,求教怎么整理思路。 最好要有个大神手把手教我,谢谢各位大神了。我的Q517584338

张超伟 | 园豆:200 (初学一级) | 2017-04-20 14:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册