2012-12-12 1 views
4

Roslyn의 2012 년 9 월 CTP를 사용하고 있습니다.Roslyn : 해결되지 않은 유형을 얻는 방법

C# 코드 문서에서 해결되지 않은 형식을 얻는 가장 우아한 방법은 무엇입니까? 예 : Guid 유형에는 시스템 네임 스페이스가 필요합니다. 현재 나는 다음과 같은 것을 가지고 있습니다 :

  var semanticModel = (SemanticModel)document.GetSemanticModel(); 
      var tree = (SyntaxTree)document.GetSyntaxTree(); 

      //get unresolved types 
      var unresolvedTypes = tree.GetRoot().DescendantNodes().OfType<IdentifierNameSyntax>() 
       .Where(x => semanticModel.GetSymbolInfo(x).Symbol == null); 

IdentifierNameSyntax와 GetSymbolInfo를 사용하는 것이 맞습니까?

는 또한 그들은 모두 나에게 매우 유사, GetTypeInfoGetSymbolInfo의 차이 것입니다.

답변

8

여기에 몇 가지 질문이 있습니다.

Q : IdentifierNameSyntax을 사용하는 것이 맞습니까?
A : generic 형식을 처리하는 데 아마도 SimpleNameSyntax을 사용하려고합니다. 또한 ALL SimpleNameSyntax 요소를보고 싶지 않을 수도 있습니다. 당신은 유형의 컨텍스트에서 실제로없는 것들에 대한 잘못된 반응을 얻을 것이다 (예를 들어, var x = Console();

Q와 같은 일부 코드를 상상 : 그것은 올바른 GetSymbolInfo를 사용하고 널 (null)을 확인하는 것입니다
A : 네, 이것은이다 여기에서 확인 할 옳은 일

는 Q :. GetSymbolInfoGetTypeInfo의 차이점은 무엇
는 A는 :?. 차이가 없다 그러나, 임의의 표현식, 타입 이름을 나타내는 구문 GetSymbolInfo의 특정 기호를 나타냅니다 표현식 (예 : 메소드 호출, 인덱서 액세스, 배열 액세스, 오버로드 된 연산자 등) 및 GetTypeInfo은 결과 형식을 나타냅니다 (식에 대한 선언을 추가하는 경우 생성 할 형식을 알 수 있도록). 예를 들어 InvocationExpressionSyntax (예 : myString.GetHashCode())을 가져옵니다. GetSymbolInfoGetHashCode()에 대한 메서드 기호를 반환하고 GetTypeInfoSystem.Int32을 반환합니다.

+0

'var x = Console();'과 같은 것은 컴파일 할 수 없으므로 그러한 코드의 정확성을 확인하는 것이 좋습니다. 그렇지 않다면'SimpleNameSyntax' 엘리먼트는 피해야 만할까요? – Skyblade