【问题标题】:How to add a property definition to existing type如何将属性定义添加到现有类型
【发布时间】:2013-10-30 04:24:41
【问题描述】:

如果我想为一个类型添加一个新属性,我需要重建整个类型还是有办法将属性添加到现有类型?既然只能替换节点,那我必须替换整个类声明节点吗?如果是这样,一个人会怎么做?

我发现这样做的唯一方法是肮脏的,基本上归结为获取类型的源代码,找到第一个左括号,并为属性插入新的源代码,然后解析结果文本,然后替换旧的类声明节点带有一个新节点。

类似这样的:

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

【问题讨论】:

    标签: c# roslyn


    【解决方案1】:

    您可以查看 CTP 中包含的 ImplementINotifyPropertyChanged 示例。它所做的其中一件事是添加一个事件和一个方法。同样的策略也适用于属性。

    【讨论】:

      猜你喜欢
      • 2013-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-26
      相关资源
      最近更新 更多