在c#

时间:2017-04-05 20:57:24

标签: c#

假设我有一个方法A,其工作原理如下:

methodA() {
    while(some condition) {
        do computation...
        if(something 1) {
            do computation...
            if(some condition) {
                return result;
            }
        }
        else if(something 2) {
            do computation...
            if(some other condition) {
                return result;
            }
        }
    }
    return something;
}

此方法可以在while循环中的两个条件中返回,也可以在while循环之后返回。

现在说我想要一些其他方法,称之为methodB(),在返回之前激活。我可以这样做:

methodA() {
    while(some condition) {
        do computation...
        if(something 1) {
            ...
            if(some condition) {
                methodB();
                return result1;
            }
            else if(something 2) {
                ...
                if(some condition) {
                    methodB();
                    return result2;
                }
            }
        }
    }
    methodB();
    return result3;
}

但我发现它很难看。有没有更好的方法在C#中做这样的事情?

4 个答案:

答案 0 :(得分:1)

methodB取决于methodA的任何内部状态吗?如果没有,请在原始methodA(现在重命名为methodB)之后回复methodA并致电originalMethodA

methodA() {
    var result = originalMethodA();
    methodB();
    return result;
}

originalMethodA() {
    // your original methodA goes here, without calls to methodB
}

答案 1 :(得分:0)

methodA() {
var result = result3;
while(some condition) {
    do computation...
       if(something 1) {
           ...
           if(some condition) {
               result = result1;
               break;
           }
           else if(something 2) {
               ...
                if(some condition) {
                  result = result2;
                  break;
               }
           }
       }
   }
   methodB();
   return result;
}

答案 2 :(得分:0)

这是try-finally的完美用法。 finally块中的代码将在所有三个return语句后执行。

methodA() {
    try
    {
        while(some condition) {
            do computation...
            if(something 1) {
            ...
                if(some condition) return result1;
                else if(something 2 && some condition) return result2;
            }
        }
        return result3;
    }    
    finally {
        methodB();
    }
}

答案 3 :(得分:0)

我认为解决方案是直截了当的,你不应该在methodB();中调用methodA();它不会生成干净的代码。

对于您的解决方案,如果您没有进行多线程处理,只需拨打methodB();电话,然后在致电methodA();后立即安排。

var result = methodA(); methodB();