You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:42:42