2011-03-08 2 views
2

현지화 문제를 해결하기 위해 대체하려고하는 일부 코드가 있습니다. 이와신속한 코드 업데이트를위한 정규 표현식

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

: 기본적으로 나는이 보이는 코드를 교체 할 필요를 도와 줄 수있는 정규식 표현이있을 수 있습니다 생각

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

을 시각적으로 검색 찾기 및 바꾸기 사진관. 이견있는 사람?

+0

정규 표현식이 일치해야하는 것을 더 정확하게 지정할 수 있습니까? 한자리 숫자가 포함 된 리터럴 문자열을 파싱하는 예를 하나만 제시했습니다. 변수, 연결 등을 포함하여 더 복잡한 표현이있을 수 있습니까? –

+0

@ 마크 - 정확합니다. 변수와 연결을 포함하여 매개 변수에 대해 아무 것도 사용할 수 있습니다. –

답변

4

C# 코드를 올바르게 구문 분석 할 수있는 정규 표현식을 작성하는 것은 어렵습니다 (불가능합니까?). 이 작업을 시도 할 수 있지만, 그러한 표현이 중첩 된 괄호가 포함되어있는 경우로, 모든 경우에서 작동하지 않습니다 {Convert.ToDouble\([^,]+}\)

  • 로 교체 :

    • 무엇을 찾기 \1, CultureInfo.InvariantCulture)

    약간 다른 접근 방식을 t

    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(); 
         } 
        } 
    } 
    

    그런 다음 당신이 해결할 수 : 일시적으로 프로젝트에이 클래스를 추가하여, 당신을 위해 코드를 분석하는 컴파일러를 얻을 수 있습니다 그는 쓸모없는 메소드를 사용하는 것에 대한 경고를하고 마지막으로 임시 클래스를 제거합니다.

  • +0

    +1 원치 않는 코드를 "완전히 해독 한 다음 해결"하지 않고 쉽게 제거 할 수있는 좋은 방법입니다! – AAT

    +0

    나는이 접근 방식을 좋아하고 이와 비슷한 것을 시도하지 않았다. 다른 사람들이 비슷한 경험을했는지 확인하기 위해 스레드를 열어 두겠습니다. –

    +0

    나는이 접근 방식을 좋아하지만'System.Convert'의 또 다른 정의를 추가하지 않으면 컴파일러 오류가 발생합니까? –