使用 Roslyn 获取忽略 lambda 表达式中的返回语句

alf*_*ace 0 c# return roslyn

我正在尝试使用 roslyn 来获取方法的返回语句,为此我正在使用它:

var returns = methods.DescendantNodes().OfType<ReturnStatementSyntax>();
Run Code Online (Sandbox Code Playgroud)

那行得通,它给了我所有的返回语句。但是现在,我想获得所有返回值而忽略 lambda 表达式中的值。

我怎样才能做到这一点?

是否有任何财产表明这一点?

Gör*_*zer 5

我不确定,但您可以尝试类似的操作:

method.DescendantNodes().OfType<ReturnStatementSyntax>().Where(
     rs => !(rs.AncestorsAndSelf().OfType<LambdaExpressionSyntax>().Any())
);
Run Code Online (Sandbox Code Playgroud)

我希望这能解决你的问题。

  • 编写一个从不输入 lambda 表达式的访问者会更有效率。 (2认同)