Как проверить тип параметра в методе при использовании Roslyn
Я делаю анализ кода с Roslyn, чтобы проверить это, хотя у меня есть следующая подпись
public void MyMethod(object anObject, MyCustomObject customObject);
Я только хочу получить в качестве параметров строку (1-й) и дочерний элемент из MyCustomObject (2-й). У меня нет власти над подписью, ее нельзя изменить.
Вот что я сделал, чтобы оценить мой метод (Вот фрагмент)
public void OnMethodInvocation(SyntaxNodeAnalysisContext context)
{
var invocation= context.Node as InvocationExpressionSyntax;
var symbol = context.SemanticModel.GetSymbolInfo(invocation).Symbol as IMethodSymbol;
if (symbol?.Name.ToString()== "MyMethod")
{
var parameterList = invocation.Parameters;
}
На данный момент я могу манипулировать своими объектами IParameterSymbol из свойства Parameters (symbol.Parameters). То, что я не получаю, это следующее: я просмотрел свой результат IEnumerable, содержащий оба моих параметра, но из-за сигнатуры метода он ожидает получить объект и экземпляры MyCustomObject. Я не в состоянии (на данный момент) быть уверенным, что первый параметр действительно является объектом, а не строкой (просто примером, мог бы быть чем-то еще), и что, когда я ожидаю дочерний элемент MyCustomObject, если я даю ему ноль, я хочу знать, что это нулевой параметр.
Я буду благодарен любому, кто сможет вырвать меня из этой липкой ситуации!
ОБНОВЛЕНИЕ
Вот какая информация мне дается, когда я попадаю в объект ArgumentSyntax:
ArgumentSyntax Argument exception
ContainsAnnotations: false
ContainsDiagnostics: false
ContainsDirectives: false
ContainsSkippedText: false
Expression: IdentifierNameSyntax IdentifierName exception
FullSpan: {[550..559)}
HasLeadingTrivia: false
HasStructuredTrivia: false
HasTrailingTrivia: false
IsMissing: false
IsStructuredTrivia: false
KindText: "Argument"
Language: "C#"
NameColon: null
Parent (Microsoft.CodeAnalysis.SyntaxNode): ArgumentListSyntax ArgumentList (exception,exception)
ParentTrivia: SyntaxTrivia None
RawKind: 8638
RefOrOutKeyword: SyntaxToken None
Span: {[550..559)}
SpanStart: 550