假设我有一个方法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#中做这样的事情?
答案 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();