C# 在c中返回值之前执行方法#

C# 在c中返回值之前执行方法#,c#,C#,假设我有一个方法a,其工作原理如下: methodA() { while(some condition) { do computation... if(something 1) { do computation... if(some condition) { return result; } } else if(somet

假设我有一个方法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#中有没有更好的方法来做类似的事情?

方法B是否依赖于方法a的任何内部状态?如果没有,则将
methodA
换行,并在原始
methodA
(现在重命名为
originalMethodA
)返回后调用
methodB

这是一个完美的使用。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();
    }
}

我认为解决方案是直截了当的,您不应该调用
methodB()methodA()中编码>无论如何它不会生成干净的代码

对于您的解决方案,如果您不执行多线程,只需取出
methodB()调用并将其放置在调用
methodA()之后

var result=methodA();

方法b()

在if语句之前调用
methodB()
?看到这听起来像是什么吗,你想用它实现什么?也许有其他方法可以解决你的问题,但如果不知道这里的实际目标是什么,我们就无法知道。也许是一些涉及try/finally的方法?或者只包装该方法,使其中一个方法只执行
var val=Whatever();方法b();返回val有很多方法可以做到这一点。有关五种不同的选项,请参见(滚动至标题为“如何在末尾添加通用代码”的部分)。。
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;
}
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();
    }
}