2016-08-12 64 views
0

我有一个方法ErrorLog()它被调用了大约200次,并有4个参数。方法参数改变问题

现在我想再添加1个参数。但是当我这样做的时候,有200多个错误。新的参数是Exception e

我可以去任何方法调用&添加一个参数是Exception e,但这将需要很多时间。

有没有简单的办法呢?

我正在使用VS 2015专业版。

新参数不是可选的。我需要在每次通话时都传递它。

+2

为了避免将来出现这种情况,请传递包含4个成员的类(或接口)。然后,如果您需要添加新成员,则该方法的签名不会更改 –

+0

当新参数不是可选的时,您*可以*更改调用代码,是吗? – HimBromBeere

+0

@HimBromBeere是的......但这就是我的问题是......有没有简单的方法?正如我所传递的对于所有方法都是一样的。 – Anup

回答

0

该函数的最后一个参数设定的默认值,如

function Errorlog(var1, var2, var3, var4, var5=...) 
{ 

} 
5

你有两个(实际上有三个)的机会:

  1. 定义与新的说法了新的过载

    ErrorLog(string arg1, string arg2, string arg3, string arg4) {...} 
    ErrorLog(string arg1, string arg2, string arg3, string arg4, Exception e) {...} 
    

    这样你也可以给用户一个提示,只有四个参数的方法是deprecat编辑,因此应该使用属性进一步使用nopt。任何仍然使用“旧”行为的用户将得到一个编译器警告来更改该方法,但是对于传统代码,它保证能够工作(至少在给定时间内)。

    但是你应该从旧的呼叫重新定向到新的方式提供了新的参数一些默认值:

    ErrorLog(string arg1, string arg2, string arg3, string arg4) 
    { 
        ErrorLog(args1, arg2, arg3, arg4, null); 
    } 
    
  2. 定义新的参数作为可选

    ErrorLog(string arg1, string arg2, string arg3, string arg4, Exception e = null) 
    { 
        if(e == null) //... 
    } 
    
  3. 如前所述,

    改变了每一次呼叫的呼叫代码,Search and replace使用正则表达式选项使这相当容易:

    发现:ErrorLog\((^\)*)\)
    取代:ErrorLog($1, e)

0

你必须改变调用代码为每个呼叫。

整形器的Change_Signature提供了一种自动和简单的方法来更改方法签名并相应地更新呼叫。