返回之后或之前触发代码 - c#

在返回之前/之后如何执行代码的某些部分。例如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块之前定义的位置。

当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java

我正在使用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万只当然实际上这是估算的,具体应…