如何通过SemanticModel获取ImplicitObjectCreationExpression的创建类型
解决方案
ImplicitObjectCreationExpressionSyntax对应C#中的new()隐式对象创建语法,这类节点本身没有显式的类型声明子节点,你可以直接通过SemanticModel.GetTypeInfo()方法获取整个表达式的语义推导类型:
using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp.Syntax; public static SemanticModel model; public static ITypeSymbol GetCreationType (BaseObjectCreationExpressionSyntax boces) => boces switch { ObjectCreationExpressionSyntax oces => model.GetSymbolInfo(oces.Type).Symbol! as ITypeSymbol, ImplicitObjectCreationExpressionSyntax ioces => model.GetTypeInfo(ioces).Type! };
如果你需要同时获取绑定的构造函数信息,也可以用以下方式拿到目标类型:
(model.GetSymbolInfo(ioces).Symbol as IMethodSymbol)?.ContainingType!
内容的提问来源于stack exchange,提问作者trinalbadger587
相关产品推荐
相关产品推荐

