2011-03-24 6 views
2

다음과 같은 문제가 생겼습니다 :ReSharper 패턴 내에서 문자열의 내용을 어떻게 추출합니까?

LINQ 멤버 표현식이있는 속성 이름이 들어있는 하드 코드 된 문자열을 바꿔야합니다. ReSharper 패턴이있는

// like this: 
NotifyOfPropertyChange("MyProperty"); 
// becomes 
NotifyOfPropertyChange(() => MyProperty); 

.

다음 시도가 작동하지 않았습니다.

NotifyOfPropertyChange("$prop$"); // ($prop$ is of type Identifier, results in parse error) 
NotifyOfPropertyChange($prop$); // ($prop$ is of type Expression [System.String], 
           // almost works, but without removing the quotes 

대체 패턴은 항상 동일합니다.

NotifyOfPropertyChange(() => $prop$); 

어떤 아이디어입니까?

답변

0

본인의 의도를 정확히 이해하면 도움이 될 것입니다. 몇 시간 전 나는

public static string GetPropertyName<T>(Expression<Func<T>> propertyExpression) 
    { 
     return (propertyExpression.Body as MemberExpression).Member.Name; 
    } 

를 (원래 게시 누가 기억할 수없는)이 코드 조각을 발견 그래서 다음

NotifyPropertyChange("MyProperty") 
+0

나는 그가 실행 시간에 아무 것도하지 않고 R # s Structural Search와 Replace를 사용하는 것에 대해 질문하고 있다고 생각한다. – AakashM

1

:

NotifyPropertyChange(() => MyProperty) 

는 결과를 제공한다 R #의 Structural Search와 Replace가 필요하다고 생각하지 않습니다. (행운입니다. 현재 버전에서는 그렇게 할 수 없다고 생각하기 때문입니다.) 비주얼 스튜디오의 찾기 및 바꾸기 정규 표현식에 좋은 충분해야한다 : 그들은 그룹화 구조가 될 dontg 있도록

Find What: 
NotifyPropertyChange\("{.*}"\) 

()는 이스케이프; 내 패턴과 일치 무엇이든 { } 태그는 여기

Replace with: 
NotifyPropertyChange(() => \1) 

다 '는 첫 번째 발현을'태그가 의미하는 \1 제외 리터럴 표현 교체에이를 사용할 수 있습니다.

관련 문제