2011-03-08 122 views
2

我們有一些代碼正在嘗試替換以處理本地化問題。基本上我需要替換代碼看起來像這樣:正則表達式以快速更新代碼

var x = Convert.ToDouble("5"); 

與此:

var x = Convert.ToDouble("5",CultureInfo.InvariantCulture); 

我認爲有可能是一個正則表達式的表達,可以幫助我與在Visual查找和替換搜索工作室。有什麼想法嗎?

+0

你能更精確地指定正則表達式必須匹配什麼嗎?您只給出了一個解析包含單個數字的文字字符串的示例。那裏是否還有更復雜的表達,包括變量,連接等? – 2011-03-08 21:53:39

+0

@Mark - 你是對的。任何可以用於包括變量和連接的參數。 – 2011-03-08 21:56:19

回答

4

編寫一個可以正確解析C#代碼的正則表達式很困難(不可能?)。你可以試試這個,但它不會任何情況下工作的,例如當表達式包含嵌套的括號:

  • 查找內容:{Convert.ToDouble\([^,]+}\)
  • 替換爲:\1, CultureInfo.InvariantCulture)

稍微不同的方法是通過臨時將這個類添加到您的項目中來讓編譯器解析代碼:

namespace System 
{ 
    static class Convert 
    { 
     [Obsolete] 
     public static double ToDouble(object o) 
     { 
      throw new NotImplementedException(); 
     } 

     public static double ToDouble(object o, CultureInfo ci) 
     { 
      throw new NotImplementedException(); 
     } 
    } 
} 

然後您可以修復t他警告使用過時的方法,並最終刪除臨時班。

+0

+1好的方法來排除不需要的代碼,而不需要「徹底解決並修復它」方法! – AAT 2011-03-08 21:47:31

+0

我也喜歡這種方法,並沒有想過嘗試這樣的事情。我會繼續討論,看看是否有其他人有類似的經歷。 – 2011-03-08 21:55:20

+0

我喜歡這種方法,但不會添加'System.Convert'的另一個定義會導致編譯器錯誤? – 2011-03-08 22:03:28