为什么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;
我正在尝试使用 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;