You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:48:03