我正在尝试在我的解决方案中识别“方法组”语法的用法。原因是Resharper试图帮助ConvertClosureToMethodGroup代码检查。问题是,“优化”代码不会编译为相同的IL代码,这意味着它在我的特定场景中中断。下面的场景不会中断,但它说明了我想要找到的内容:
void Main()
{
var arr = new string[]{"foo"};
//This works
var bar = arr.Select(s=>MyMethod(s));
//Resharper suggests the below, which is different
//var bar = arr.Select(MyMethod);
}
string MyMethod(string s)
{
return "bar";
}
那么:有没有办法,我可以识别我的代码中的所有位置,哪个方法作为方法组传递?
我可以禁用重构建议以防止将来使用此功能,但如何确定已经发生这种情况的位置?
编辑1:此重构破坏运行时的示例
void Main()
{
MyClass obj = null;
//This works
var lazy = new Lazy<bool>(()=> obj.MyMethod());
//This will break at runtime when obj is null
//var lazy = new Lazy<bool>(obj.MyMethod);
}
class MyClass
{
public bool MyMethod()
{
return false;
}
}