Проверка допустимости аргумента 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
выяснить, если преобразование существует. Обратите внимание, что методы зависят от языка, так как каждый язык имеет некоторые уникальные правила для преобразований.