如何在Roslyn中检测委托转换的隐式方法?

时间:2014-11-03 13:55:14

标签: c# roslyn

所以id喜欢找到方法组id被强制转换为委托的地方,如:

EventHandler a = method;

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

EventHandler a = new EventHandler(method);

对于这两种类型,类型信息和转换看起来完全相同。有没有办法在没有遍历树的情况下使用语义模型并尝试查找父对象表达式?

1 个答案:

答案 0 :(得分:1)

可以通过遍历二进制表达式节点并查看右表达式转换来粗略地找到这些位置:

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

   }
}

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