2017-06-29 11 views
0

Roslynを使用してクラスメソッドのパラメータリストを取得しようとしていますが、Roslynがエラーの原因となるメソッドのパラメータの1つとしてメソッド本体内で使用されるLambdaパラメータを考慮して返すという奇妙な動作私のコードで。なぜRoslynはメソッドのパラメータとしてラムダパラメータを考慮しますか?ラムダ式パラメータがメソッドパラメータリストに表示されるのはなぜですか?

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! 

解析されたコード:pはないタイプの方法1のパラメータの1つとして返され

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

memmethを仮定

+0

どのようにクラッシュしますか?どの例外がスローされますか? –

+0

Throws System.NullReferenceException – Supernova

+0

'' 'mempara.Type.ToFullString()?Trim();' '' nullpropagationを使用することをお勧めします。 –

答えて

0

は、Aである。ここで

コードでありますMethodDeclarationSyntaxの場合は、ParameterList.Parametersにアクセスします。

var paramDeclaratons = memmeth.ParameterList.Parameters; 
+0

ありがとう、それはすべての違いを作った! – Supernova

関連する問題