2014-04-28 3 views
1

C# 코드에서 모든 변수 이름을 추출 할 수있는 방법이 있습니까? 즉, 소스 코드 파일을 사용하고 해당 소스 코드에 변수 이름 배열을 반환하는 함수가 있습니까?주어진 외부 C# 소스 코드에서 모든 변수 이름 추출

+0

, R # 또는 같은 기존 기능 후크 훨씬 쉬울 수 있습니다 VS 코드 분석 일명 FxCop. – nvoigt

+0

그 변수 이름을 나열하고 저장하고 싶습니다. 통계 용으로 필요합니다. –

+1

몇 년 전부터이 질문과 같은 의미입니까? http://stackoverflow.com/questions/12181987/retrieving-list-of-variables-names-used-in-a-c-sharp-file – Andy

답변

3

Microsoft Roslyn의 미리보기 버전이 최근에 발표되었으므로 변수 이름에 복잡한 형식 확인이 필요하지 않으므로 비교적 간단합니다. 단일 코드 파일 외부에는 컨텍스트가 필요하지 않습니다.

다음은 구현 예입니다. 변수 선언의 모든 경우가 일치하지만 매개 변수, 필드, 지역 변수 및 람다 매개 변수가 포함되어 있는지 확인하기에 충분하지는 않았습니다. 변수 이름은 이고 변수 이름은입니다. 예 : 형식 매개 변수 이름도 포함 할 수 있습니다.

string sourceCode = "class A { " + 
       "int field; " + 
       "void B(string parameter) { " + 
       "int a, b; int c; " + 
       "Action<string> q = (x) => { Console.WriteLine(x); }; " + 
       "}"; 

//or parsefile etc 
var syntaxTree = CSharpSyntaxTree.ParseText(sourceCode); 

string[] identifierNames = syntaxTree.GetRoot().DescendantNodes() 
      .OfType<VariableDeclaratorSyntax>().Select(v => v.Identifier.Text) 
      .Concat(syntaxTree.GetRoot().DescendantNodes().OfType<ParameterSyntax>().Select(p => p.Identifier.Text)) 
      .ToArray(); 
//identifierNames contains "field", "a", "b", "c", "q", "parameter", "x" 

이 작업을하려면, 로슬린은 (Nuget 사용)이 포함되어야합니다 : 당신이 변수 이름을 확인하려면

PM> Install-Package Microsoft.CodeAnalysis -Pre 
+0

그게 정확히 필요합니다. 고마워요. –