C# 方法参数因问题而更改

C# 方法参数因问题而更改,c#,visual-studio,C#,Visual Studio,我有一个方法ErrorLog(),它被调用了大约200次,有4个参数 现在我想再添加一个参数。但当我这样做时,有200多个错误。新参数的类型为异常e 我可以访问每个方法调用并添加一个参数,它是异常e,但这将花费很多时间 有什么简单的方法可以解决这个问题吗 我正在使用VS 2015 Professional 新参数不是可选的。我需要在每次调用时传递它。为函数的最后一个参数设置默认值,例如 function Errorlog(var1, var2, var3, var4, var5=...) {

我有一个方法
ErrorLog()
,它被调用了大约200次,有4个参数

现在我想再添加一个参数。但当我这样做时,有200多个错误。新参数的类型为
异常e

我可以访问每个方法调用并添加一个参数,它是
异常e
,但这将花费很多时间

有什么简单的方法可以解决这个问题吗

我正在使用VS 2015 Professional


新参数不是可选的。我需要在每次调用时传递它。

为函数的最后一个参数设置默认值,例如

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

}

为函数的最后一个参数设置默认值,例如

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

}
您有两个(实际上是三个)机会:

  • 使用新参数定义新重载

    ErrorLog(string arg1, string arg2, string arg3, string arg4) {...}
    ErrorLog(string arg1, string arg2, string arg3, string arg4, Exception e) {...}
    
    通过这种方式,您还可以向用户提示,只有四个参数的方法已被弃用,因此不应使用
    过时属性进一步使用。任何仍然使用“旧”行为的用户都会收到编译器警告,要求更改方法,但是对于遗留代码,它保证可以工作(至少在给定的时间内)

    但是,您应该将调用从旧方式重新定向到新方式,为新参数提供一些默认值:

    ErrorLog(string arg1, string arg2, string arg3, string arg4)
    {
        ErrorLog(args1, arg2, arg3, arg4, null);
    }
    
  • 将新参数定义为可选参数

    ErrorLog(string arg1, string arg2, string arg3, string arg4, Exception e = null) 
    {
        if(e == null) //...
    }
    
  • 如前所述,更改每次调用的调用代码,
    Search and replace
    使用regex选项使此操作相当简单:

    查找:
    ErrorLog\(^\)*)\

    替换:
    ErrorLog($1,e)

  • 您有两个(实际上是三个)机会:

  • 使用新参数定义新重载

    ErrorLog(string arg1, string arg2, string arg3, string arg4) {...}
    ErrorLog(string arg1, string arg2, string arg3, string arg4, Exception e) {...}
    
    通过这种方式,您还可以向用户提示,只有四个参数的方法已被弃用,因此不应使用
    过时属性进一步使用。任何仍然使用“旧”行为的用户都会收到编译器警告,要求更改方法,但是对于遗留代码,它保证可以工作(至少在给定的时间内)

    但是,您应该将调用从旧方式重新定向到新方式,为新参数提供一些默认值:

    ErrorLog(string arg1, string arg2, string arg3, string arg4)
    {
        ErrorLog(args1, arg2, arg3, arg4, null);
    }
    
  • 将新参数定义为可选参数

    ErrorLog(string arg1, string arg2, string arg3, string arg4, Exception e = null) 
    {
        if(e == null) //...
    }
    
  • 如前所述,更改每次调用的调用代码,
    Search and replace
    使用regex选项使此操作相当简单:

    查找:
    ErrorLog\(^\)*)\

    替换:
    ErrorLog($1,e)


  • 您必须更改每次呼叫的呼叫代码


    但是整形器提供了一种自动且简单的方法来更改方法签名并相应地更新调用。

    您必须更改每个调用的调用代码


    但是Reformers提供了一种自动且简单的方法来更改方法签名并相应地更新调用。

    为了避免将来出现这种情况,请传递一个包含4个成员的类(或接口)。然后,如果你需要添加一个新成员,方法的签名不会改变。如果新参数不是可选的,你必须更改调用代码,不是吗?@HimBromBeere是的……但这就是我的问题……有没有简单的方法?因为我通过的所有方法都是一样的。!您可以尝试查找并替换
    methodname\(.*)
    methodname($1,e)
    -不保证backup@Max好主意,我想这应该是一个答案。为了避免将来出现这种情况,请传递一个包含4个成员的类(或接口)。然后,如果你需要添加一个新成员,方法的签名不会改变。如果新参数不是可选的,你必须更改调用代码,不是吗?@HimBromBeere是的……但这就是我的问题……有没有简单的方法?因为我通过的所有方法都是一样的。!您可以尝试查找并替换
    methodname\(.*)
    methodname($1,e)
    -不保证backup@Max好主意,我想这应该是一个答案。