Проверка допустимости синтаксиса аргумента для вызова с помощью метода, имеющего 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? (как наследование, так и неявное преобразование)?


person Clueless    schedule 22.12.2015    source источник


Ответы (1)


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

person Jason Malinowski    schedule 29.12.2015