如何使用源生成器获取数据成员的默认值



关于C#的新功能Source Generator,如何获取属性默认值?

例如:

class MyClass
{
public int MyValue { get; set; } = 1;
}

如何在编译时定义1

编译时不存在该值,但是,您仍然可以在编译期间从源代码中获取语法。

如果使用符号,一旦找到IPropertySymbol,就需要通过DeclaringSyntaxReferences然后GetSyntax()从中获取语法节点。属性符号没有";运行时";抽象的值。

您要查找的语法节点是PropertyDeclarationSyntax,在那里您可以得到Initializer及其Value,即ExpressionSyntax

对于字段,您需要VariableDeclaratorSyntax

ISymbol:示例

var equalsSyntax = symbol.DeclaringSyntaxReferences[0].GetSyntax() switch
{
PropertyDeclarationSyntax property => property.Initializer,
VariableDeclaratorSyntax variable => variable.Initializer,
_ => throw new Exception("Unknown declaration syntax")
};
// If the property/field has an initializer
if (equalsSyntax is not null)
{
var valueAsStr = equalsSyntax.Value.ToString();
}

相关内容

  • 没有找到相关文章

最新更新