Я играю с пакетом nuget от Roslyn CTP и думал, что знакомлюсь с классом SyntaxVisitor<>
, поэтому создаю конвертер Roslyn.Compilers.CSharp.SyntaxNode
в System.Linq.Expression
(который, похоже, работает для любого кода, который не включает семантические знания, неизвестные AST или предоставленные вне приглашения на посещение).Возможно ли создать что-то вроде метода MethodCallExpression, не зная типы связанных выражений?
Во всяком случае, у меня есть следующий код:
public override Expression VisitInvocationExpression(InvocationExpressionSyntax node) {
???
}
И у меня нет ничего. node
имеет Expression
свойство, которое может быть решена, посетив его, пока это не метод вызова:
return Expression.Invoke(
Visit(node.Expression),
node.ArgumentList.Arguments.Select(a => Visit(a.Expression))
)
Это, кажется, работает до тех пор, как Expression
не метод вызова. Если это вызов метода, хотя (статический, экземпляр или расширение), первый визит завершает вызов VisitMemberAccessExpression
, после чего я терпит неудачу (из-за того, что они не являются членами).
Есть ли способ обойти это?