在返回之前/之后如何执行代码的某些部分。例如return可能在一个方法中被多次调用,因此我希望不要在return之前复制粘贴相同的行。
我可能是错的,但有人告诉我try块会使代码运行缓慢,所以我的方法被调用了1000次以上,因此即使可以使用try / finally块完成此任务,我也希望避免。
例:
void method()
{
MyObject activator = new ...
AnotherObject something = new ...
SomethingElse asdf = new ...
// some other variables
if(..)
// Deactivate activator, close things, confirm user exited
// Do some post calculations
return;
if(..)
// Deactivate activator, close things, confirm user exited
// Do some post calculations
return;
if(..)
// Deactivate activator, close things, confirm user exited
// Do some post calculations
return;
}
现在,我需要在每次返回之前或之后执行相同的代码。我需要使用方法顶部定义的变量的代码,这就是为什么我无法外包的原因。这该怎么做?有办法吗?如果出现重复,我深表歉意。
c#参考方案
我不清楚您要实现的目标,但是根据您的帖子,您可以使用令人恐惧的goto
语句!
public void Test()
{
if (...)
goto Finish;
if (...)
goto Finish;
Finish:
DoSomething();
}
根据您的更新,我绝对会考虑使用finally
块:
void Main()
{
try
{
MyObject activator = new ...
AnotherObject db_connection = new ...
Proxy p = new ...
// some other variables
if(..)
return;
if (...)
return;
}
finally
{
// Deactivate activator, close db connection, call a webservice to confirm user exited
// Do some post calculations
}
}
最后尝试的效率
try-finally模式非常有效。考虑以下代码:
try
{
Console.WriteLine("Foo");
}
finally
{
Console.WriteLine("Bar");
}
编译为以下IL:
IL_0000: ldstr "Foo"
IL_0005: call System.Console.WriteLine
IL_000A: leave.s IL_0017
IL_000C: ldstr "Bar"
IL_0011: call System.Console.WriteLine
IL_0016: endfinally
用英语是:
加载字符串“ Foo”,并使用它调用WriteLine
。我们有一个finally
语句,所以当我们调用它时,转到位置IL_0017
-方法的结尾。加载字符串“ Bar”并使用它调用WriteLine
。终于完成了,所以我们可以继续到在finally块之前定义的位置。
我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…
Mongo汇总 - javascript我的收藏中有以下文件{ "_id": ObjectId("54490b8104f7142f22ecc97f"), "title": "Sample1", "slug": "samplenews", "cat": …
jQuery DataTable TableTool在IE和Firefox中不起作用 - c#我在MVC4 ASP.NET Web应用程序中使用Jquery DataTable TableTool。导出到Excel和PDF可以与Chrome完美配合。但是不能在IE和FireFox中使用。我的代码如下 dom: 'T<"clear">lfrtip', tableTools: { "sSwfP…
LeetCode题解计算机为什么是基于二进制的?可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制
LeetCode题解统计城市的所有灯泡这个是我刚毕业的时候,一个真实的面试题,这是一个开放题。题目描述:想办法,将一个城市的所有灯泡数量统计出来。题解:费米估算法1、如果某个城市常驻人口有1000万2、假设每5人居住在一套房里,每套房有灯泡5只,那么住宅灯泡共有1000万只3、假设公众场所每10人共享一只灯泡,那么共有100万只4、主要的这两者相加就得出了1100万只当然实际上这是估算的,具体应…