Проверка допустимости аргумента argumentsSyntax для вызова с методом, имеющим IParameterSymbol

У меня есть 2 метода:

public void Method1(object[] args); // In Class A
public void Method2(string a, SomeClass b); // In Class B

И 2 класса:

public class SomeClass {}
public class FromSomeClass : SomeClass {}

И код, который я анализирую с помощью Roslyn:

var c = new FromSomeClass();
Method1("a", c);

Я хочу проанализировать вызов Method1 и проверить, является ли он также действительным вызовом Method2, что означает:

Method2("a", c); // will this run ok?

Я дошел до того, что получил Method2 из семантической модели (IParameterSymbol), и для каждого аргумента в вызове, который у меня есть, у меня есть ITypeSymbol. Как проверить, допустим ли тип аргумента для этого IParameterSymbol? (как наследование, так и неявное преобразование)?

1 ответ

Решение

Ты можешь позвонить CSharpCompilation.ClassifyConversion или же VisualBasicCompilation.ClassifyConversion выяснить, если преобразование существует. Обратите внимание, что методы зависят от языка, так как каждый язык имеет некоторые уникальные правила для преобразований.

Другие вопросы по тегам