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