2

私には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 Call を分析し、それが有効な Method2 Call であるかどうかを確認します。つまり、次のことを意味します。

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

セマンティック モデル (IParameterSymbol) から Method2 を取得し、呼び出しの各引数に対して ITypeSymbol を取得するところまで来ました。この IParameterSymbol に対して引数の型が有効かどうかを確認するにはどうすればよいですか? (継承と暗黙の変換の両方)?

4

1 に答える 1

2

CSharpCompilation.ClassifyConversionまたはを呼び出しVisualBasicCompilation.ClassifyConversionて、コンバージョンが存在するかどうかを確認できます。各言語には独自の変換規則があるため、メソッドは言語固有であることに注意してください。

于 2015-12-29T22:06:51.713 に答える