如何用Roslyn SyntaxGenerator生成自动属性(而非SyntaxFactory)
如何用SyntaxGenerator生成自动属性(get; set;)
当然可以!你不需要切换到SyntaxFactory,SyntaxGenerator本身就支持生成自动属性的语法——问题出在你当前调用PropertyDeclaration的方式上:默认情况下,如果你不指定访问器的细节,它会生成带空代码块的get/set,也就是你看到的{ get { } set { } }。
要生成自动属性,你需要显式创建不带代码块的getter和setter访问器,然后传递给PropertyDeclaration的重载方法:
// 创建无代码块的getter和setter var getter = generator.AccessorDeclaration(SyntaxKind.GetAccessorDeclaration); var setter = generator.AccessorDeclaration(SyntaxKind.SetAccessorDeclaration); // 生成自动属性 var myProperty = generator.PropertyDeclaration( "MyProperty", generator.TypeExpression(SpecialType.System_String), Accessibility.Public, getAccessors: new[] { getter }, setAccessors: new[] { setter } );
这段代码会生成你想要的结果:
public string MyProperty { get; set; }
原理很简单:AccessorDeclaration在不指定代码块参数的情况下,会生成自动属性风格的访问器(仅包含分号,没有大括号包裹的空代码块)。通过显式传递这些访问器给PropertyDeclaration,就能覆盖默认的空块访问器行为。
内容的提问来源于stack exchange,提问作者VSDekar
相关产品推荐
相关产品推荐

