2013-10-29 1 views
1

형식에 새 속성을 추가하려면 전체 형식을 다시 작성해야합니까, 아니면 기존 형식에 속성을 추가 할 수 있습니까? 하나만 노드를 대체 할 수 있기 때문에 전체 클래스 선언 노드를 교체해야합니까? 그렇다면 어떻게해야할까요?기존 형식에 속성 정의를 추가하는 방법

이 작업을 수행 한 유일한 방법은 더티입니다. 기본적으로 유형의 소스 코드를 가져 와서 첫 번째 대괄호를 찾고 특성에 대한 새 소스 코드를 삽입 한 다음 결과 텍스트를 구문 분석 한 다음 바꾸기 만하면됩니다. 새 클래스가있는 이전 클래스 선언 노드. 이 같은

뭔가 :

var toTypeSymbol =(TypeSymbol)compilation.GetTypeByMetadataName(propertyTypeInfo.ToString()); 

var toTypeDeclarationSyntax = (ClassDeclarationSyntax) toTypeSymbol.DeclaringSyntaxNodes.First(); 

var origToTypeCode = toTypeSymbol.DeclaringSyntaxNodes.First().ToFullString(); 

var idx = origToTypeCode.IndexOf("{")+1; 

var newPropertyCode = String.Format(@" protected internal virtual {0} {0} {{get;set;}}",classSymbol.Name); 

var newTypeCode = origToTypeCode.Insert(idx, newPropertyCode); 

var newType = Syntax.ParseCompilationUnit(newTypeCode).NormalizeWhitespace(); 

var classDeclarationSyntax = newType.ChildNodes().OfType<ClassDeclarationSyntax>().First(); 

var temp = toTypeDeclarationSyntax.Parent.ReplaceNode(toTypeDeclarationSyntax,classDeclarationSyntax).NormalizeWhitespace(); 


Console.WriteLine(temp.ToFullString()); 

답변

3

당신은 CTP에 포함 된 ImplementINotifyPropertyChanged 샘플을 살펴 수 있습니다. 그것이하는 일 중 하나는 이벤트와 메서드를 추가하는 것입니다. 동일한 전략이 속성에도 적용됩니다.

관련 문제