使用 Roslyn 获取 return 语句,忽略 lambda 表达式中的语句

Use Roslyn to get return statements ignoring the ones inside lambda expressions

我正在尝试使用 roslyn 获取方法的 return 语句,为此我正在使用:

var returns = methods.DescendantNodes().OfType<ReturnStatementSyntax>();

行得通,它给了我所有的 return 语句。但是现在,我想让所有 returns 忽略 lambda 表达式中的那些。

我该怎么做?

有没有属性表示的?

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

method.DescendantNodes().OfType<ReturnStatementSyntax>().Where(
     rs => !(rs.AncestorsAndSelf().OfType<LambdaExpressionSyntax>().Any())
);

希望这能解决您的问题。