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(); 
} 

Поскольку мое решение имеет перегрузки (с таким же именем) метод, который я получил исключение (более одного).

Так что мне нужно использовать ниже метод, который нужен Type [].

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

Но как я могу получить Type от TypeSyntax?

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

ответ

2

Вы будете нуждаться символы здесь.

С вашей ParameterSyntax р используйте SemanticModel.GetDeclaredSymbol, чтобы получить IParameterSymbol, а затем посмотреть на его Type получить ITypeSymbol вы заинтересованы.

+0

мне нужно System.Type послать за getMethod .how получить System.Type от ITypeSymbol? – mohsen

+4

Вы не можете - отражение и рослины - это отдельные миры. Вы можете найти обходное решение, использующее Type.MetadataName, хотя и использовать его для поиска правильного типа с помощью отражения. –

Смежные вопросы