检查 argumentSyntax 是否有效以使用具有 IParameterSymbol 的方法调用
Checking if argumentSyntax is valid to be invoked with a method that has IParameterSymbol
我有两种方法:
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 是否有效? (既继承又隐式转换)?
您可以调用 CSharpCompilation.ClassifyConversion
或 VisualBasicCompilation.ClassifyConversion
来确定是否存在转化。请注意,这些方法是 language-specific,因为每种语言都有一些独特的转换规则。
我有两种方法:
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 是否有效? (既继承又隐式转换)?
您可以调用 CSharpCompilation.ClassifyConversion
或 VisualBasicCompilation.ClassifyConversion
来确定是否存在转化。请注意,这些方法是 language-specific,因为每种语言都有一些独特的转换规则。