获取 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。
如果我有一个 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。