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