首页 > 解决方案 > 获取 ImplicitObjectCreationExpression 的类型

问题描述

如果我有一个ImplicitObjectCreationExpression,我怎样才能得到正在使用创建的类型SemanticModel

我的代码:

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!,
        ImplicitObjectCreationExpressionSyntax ioces => // ???
    };

标签: c#new-operatorroslynmicrosoft.codeanalysis

解决方案


使用sharplab.io,我们可以看到这样的语句

object x = new();

有这样的语法树(new()仅显示部分):

在此处输入图像描述

您想要的类型是“操作”节点的子节点,您可以使用SemanticModel.GetOperation. 然后你就可以得到它的Type.

model.GetOperation(ioces).Type!

推荐阅读