获取 ImplicitObjectCreationExpression 的类型

Getting type of an 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 => // ???
    };

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

object x = new();

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

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

model.GetOperation(ioces).Type!

您想调用 GetTypeInfo 而不是 GetSymbolInfo。