gpt4 book ai didi

c# - 在 Roslyn 中解析 nameof 表达式

转载 作者:太空狗 更新时间:2023-10-29 20:26:55 25 4
gpt4 key购买 nike

我正在尝试用 nameof 做点什么CSharpSyntaxWalker 中的表达式, 但是,我注意到没有 NameOfExpressionSyntax在 AST 中。相反,我得到一个 InvocationExpressionSyntax为此 SemanticModel.GetSymbolInfo不返回匹配的符号,并且调用的表达式是 IdentifierNameSyntax包含标识符 token "nameof" .

所以要认识nameof我会在 VisitInvocationExpression 中添加一个特例, 寻找是否 GetSymbolInfo返回任何内容,如果没有,则查找标识符是否为 nameof .但是,这对我来说听起来有点不确定。是否有更好的方法将这种检测逻辑转移到解析器?

(附言:我知道这可能是出于向后兼容性的原因而这样解析的;只是想知道是否有用于区分 nameof 和正常调用的 API。)

最佳答案

nameof表达式是编译时常量。您可以使用该事实将其与正常调用区分开来。您可以调用SematicModel.GetConstantValue()InvocationExpressionSyntax 上.如果是 nameof ,你会得到 Optional<object>.Value 中的字符串/名称(HasValue 也返回 true)。

关于c# - 在 Roslyn 中解析 nameof 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39325604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com