2016-05-07 4 views
2

私は、拡張メソッドを持つメソッドのILを得る:どのようにsystem.Typeを見つけるには、MethodDeclaractionSyntaxのパラメータとroslyn?

public static byte[] getIL(this Type t,string nameOfMethod) 
{ 
    MethodBody mb=t.GetMethods(BindingFalgs...).Where(m=>m.Name ==nameOfMethod).Single(); 
    return mb.GetMethodBody().GetIlAsByteArray(); 
} 

私の解決策は、私は(1以上のものを持っている)例外を得た過負荷(同じ名前の)メソッドを持っているため。

ですから、タイプ[]が必要な以下の方法を使用する必要があります。

//this will replace in above method 
m.GetMethod("NameOfMethod",ArrayTypeOfParameter); 

しかし、TypeSyntaxからTypeを取得するにはどうすればよいですか?

public override SyntaxNode VisitMethodDeclarationSyntax(MethodDeclarationSyntax m) 
{ 
foreach(ParameterSyntax p in m.ParameterList.Parameters) 
    { 
     TypeSyntax t=p.Type; 
     //how get system.Type here 
} 

答えて

2

あなたはここにシンボルが必要になるだろう。その後、あなたのParameterSyntax Pから

IParameterSymbolを取得するためにSemanticModel.GetDeclaredSymbolを使用し、ITypeSymbolあなたが

+0

。に興味がある私はgetMethodからのSystem.Typeを取得.howために送信するためのSystem.Typeを必要とし得るために、そのTypeを見てITypeSymbol? – mohsen

+4

あなたはできません - 反射とローズンは別々の世界です。あなたはType.MetadataNameを使用して回避策を見つけることができ、それを使って正しいタイプをリフレクションで見つけることができます。 –

関連する問題