解决方案 »

  1.   

    easy:str=Regex.Replace(str,@"(?i)SCMessage.ShowMSG\((.*),0\)","Parameters.MBC.ShowMSG($1,MessageBoxType.Warn)");
      

  2.   

    void Main()
    {
    string[] ss={"SCMessage.ShowMSG(\"CSDN论坛\",0)","SCMessage.ShowMSG(SRV.Message,0)","SCMessage.ShowMSG(Func.BuildStr(\"AAA\",Bstr,\"C\"),0)"};
    var reg=new Regex(@"(?i)SCMessage.ShowMSG\((.*),0\)");
    foreach(string s in ss)
    {
      Console.WriteLine("{0} --> {1}",s,reg.Replace(s,"Parameters.MBC.ShowMSG($1,MessageBoxType.Warn)"));
    }

    /*
    SCMessage.ShowMSG("CSDN论坛",0) --> Parameters.MBC.ShowMSG("CSDN论坛",MessageBoxType.Warn)
    SCMessage.ShowMSG(SRV.Message,0) --> Parameters.MBC.ShowMSG(SRV.Message,MessageBoxType.Warn)
    SCMessage.ShowMSG(Func.BuildStr("AAA",Bstr,"C"),0) --> Parameters.MBC.ShowMSG(Func.BuildStr("AAA",Bstr,"C"),MessageBoxType.Warn)
    */
    }
      

  3.   

    不建议使用正则表达式,你可以利用VS的重构功能。方法是,首先创建一个和你的原来的函数名字、签名一样,但是不包含实现的方法,我们称之为桩子。然后对它重构,转换成新的名字,这样,VS会自动对调用重命名。最后将最终的实现放在改名后的桩子中。
      

  4.   

    vs2012内测试可以使用:
    serach:  SCMessage.ShowMSG\((.*),0\)
    replace:  Parameters.MBC.ShowMSG($1,MessageBoxType.Warn)
      

  5.   


    这样对吧?
    结果SCMessage.ShowMsg("未撰写消息主题!",0);被替换成
     Parameters.MBC.ShowMsg($1,MessageBoxType.Warning);
      

  6.   


    传入参数类型不一样了,能重构吗?原来是0,1,2,3,4,5现在传入的是enum类型。
      

  7.   


    传入参数类型不一样了,能重构吗?原来是0,1,2,3,4,5现在传入的是enum类型。我的意思是,你应该让编译器去检查你的修改是否正确。因为遇到类型不匹配,编译器会提醒你,这样就不会遗漏和错误。
      

  8.   


    传入参数类型不一样了,能重构吗?原来是0,1,2,3,4,5现在传入的是enum类型。我的意思是,你应该让编译器去检查你的修改是否正确。因为遇到类型不匹配,编译器会提醒你,这样就不会遗漏和错误。这我知道,但是错误的地方多达6500多处,要一个个改的话太麻烦了。
      

  9.   


    传入参数类型不一样了,能重构吗?原来是0,1,2,3,4,5现在传入的是enum类型。我的意思是,你应该让编译器去检查你的修改是否正确。因为遇到类型不匹配,编译器会提醒你,这样就不会遗漏和错误。这我知道,但是错误的地方多达6500多处,要一个个改的话太麻烦了。不建议你改,你应该增加一个方法,保持和原来的方法接口一样,内部转换为对新方法的调用,作为适配器。
      

  10.   


    传入参数类型不一样了,能重构吗?原来是0,1,2,3,4,5现在传入的是enum类型。我的意思是,你应该让编译器去检查你的修改是否正确。因为遇到类型不匹配,编译器会提醒你,这样就不会遗漏和错误。这我知道,但是错误的地方多达6500多处,要一个个改的话太麻烦了。不建议你改,你应该增加一个方法,保持和原来的方法接口一样,内部转换为对新方法的调用,作为适配器。因为我正在对好几套软件进行统一升级,这个方法是原来的一个通用类库的,现在因为为了规范化,重新整理了新的通用类,每个项目都会重新改过,你说的方法固然可以,甚至我可以把类库的代码写在单个项目里都行,但是就不统一了,一些常规的动作要改的话,我只要改一下这个公用的类库就行了。否则每个客户那里的项目我都得重新编译了。
      

  11.   

    你的IDE是VS2010?手边没有2010的环境,不过你可以这样试试:vs2010内:
    serach:  SCMessage.ShowMSG\({.*},0\)
    replace:  Parameters.MBC.ShowMSG(\1,MessageBoxType.Warn)