c# - 如何检测在 Roslyn 中委托(delegate)转换的隐式方法?

标签 c# roslyn

所以 id 喜欢找到方法组 id 隐式转换为委托(delegate)的地方,例如:

EventHandler a = method;

并将它们与显式委托(delegate)创建区分开来

EventHandler a = new EventHandler(method);

两者的类型信息和转换看起来完全相同。有没有一种方法可以使用语义模型来做到这一点,而无需遍历树并尝试找到父新对象表达式?

最佳答案

这些地方可以通过遍历二进制表达式节点并查看右表达式转换来大致找到:

void VisitBinaryExpression(BinaryExpressionSyntax binaryExpression)
{
   var conversion = semanticModel.GetConversion(binaryExpression.Right);
   if (conversion.IsMethodGroup)
   {

   }
}

它看起来不太可靠,但这是我到目前为止发现的。

关于c# - 如何检测在 Roslyn 中委托(delegate)转换的隐式方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26715815/

相关文章:

c# - 使用 "in"参数修饰符与 int/long/etc(别名 Int32/Int64 非只读结构)

C# 低级鼠标钩子(Hook)和表单事件处理

c# - Roslyn CodeFixProvider 向方法添加属性

visual-studio-2015 - 未找到 : Diagnostic with Code Fix (NuGet + VSIX) template

c# - 具有依赖注入(inject)的 Entity Framework Core 是如何处理的?

c# - MVC 表单提交 - 重定向到无法从浏览器直接访问的操作

c# - 建议创建语言设置?

c# - 如何将 XML 文档注释添加到 Roslyn 中的 ClassDeclarationSyntax?

c# - Roslyn - 在 Visual Studio 2010 中使用 VisualStudioWorkspace

roslyn - Visual Studio 2015 包扩展,未复制引用的 dll