为什么Lambda表达式参数出现在方法参数列表中?

Why Lambda expression parameter appears in method parameter list?

我正在尝试使用 Roslyn 获取 class 方法的参数列表,并注意到 Roslyn 认为的一个奇怪行为和 returns 在方法主体内使用的 Lambda 参数作为一个方法的参数,这会导致我的代码出错。为什么 Roslyn 将 lambda 参数视为方法的参数?

代码如下:

var paramDeclaratons = memmeth.DescendantNodes().OfType<ParameterSyntax>();
foreach (var mempara in paramDeclaratons)
{                            
    String paramType = mempara.Type.ToFullString().Trim(); //Here it crashes with System.NullReferenceException because Lambda returns no type!

解析的代码:

public void Method1(RequestId requestId)
{
     ...
     var packetsToKeep = this.queuedPackets.Where(p => p.RequestId != requestId)

p 作为 Method1 的参数之一返回,没有类型

假设 memmeth 是一个 MethodDeclarationSyntax,那么你想要的是访问它的 ParameterList.Parameters:

var paramDeclaratons = memmeth.ParameterList.Parameters;