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

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;
        }

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

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

哆啦的时光机
浏览 1440回答 11
11回答

小怪兽爱吃肉

被调用方不能决定调用方的操作.这是常识. 你说的臃肿是不存在的.调用方不判断返回值这行代码谁看的懂.神仙也不知道这么一行调用后面的就不执行了. 就算你抛异常出去.外面都能接了继续跑.除非你把application结束了.

慕村225694

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

喵喵时光机

是的,努力也无效,最终我放弃这种思路,仍采取我文中最后的方式,每个方法中都增加判断的机制。 虽然重复了一些代码,但这个是最简单,最有效的,也便于理解的。

动漫人物

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

慕沐林林

@梦在旅途:  没有区别 但是逻辑上可以保持一致  且这个逻辑 可以只实现一次

慕娘9325324

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

慕盖茨4494581

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

海绵宝宝撒

@梦在旅途: Response.End();好像这个就是终止了当前线程,所以你要做到这个效果一般都是针对某一个线程里面的情况。 因为你想让后面的代码不再执行,要不就跳出去(异常或者终止线程),要不就是加多代码去判断。要不然你没要绕过待执行的代码

蓝山帝景

@Jimmy.pan: 我意思是 new 一个 Thread  ,然后就可以掌控它随时让他终止、挂起,但对主线程无影响了
打开App,查看更多内容
随时随地看视频慕课网APP