c# - 获取 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()
仅显示部分):
您想要的类型是“操作”节点的子节点,您可以使用SemanticModel.GetOperation
. 然后你就可以得到它的Type
.
model.GetOperation(ioces).Type!
推荐阅读
- c - 如何访问作为指针传递给函数的结构中定义的指针变量?
- c# - EF Core Navigational 属性与该键以外的属性
- java - java.lang.ClassNotFoundException:无法在新的 docker 容器上加载类:com.microsoft.sqlserver.jdbc.SQLServerDriver
- python - 在不破坏兼容性或循环导入的情况下将 Python 函数移动到模块
- c# - DllExportAppDomainIsolatedTask 在构建 DLL 时意外失败
- java - 如何将此响应转换为模型
- algorithm - 找到不同的子集?
- c# - 我可以将 Pomelo.EntityFrameworkCore.MySql 与 .NET Framework 4.x 一起使用吗?
- c# - 如何在单元测试项目中获取启动项目的路径?
- javascript - 在angularjs切换操作中单击按钮时选择和取消选择div