如何在C#中避免或检测隐式委托推理?

@H_502_1@我正在使用C#编写游戏,并且发现了一些函数需要委托的情况,我无意中传递了一个函数名,而不是创建和缓存委托以用作参数.这会导致为每个对这些函数调用创建一个委托对象,然后在函数返回时立即变为垃圾.

我想找到我犯了这个错误的所有地方,我宁愿避免阅读每个文件的每一行寻找它们(有多年的代码值).我看到VB有一个’选项严格’会禁用隐式构造的对象,如果C#有这个功能,我觉得这对我有用,但我认为不行.我还审查了编译器警告选项,它们似乎都没有帮助.

是否有任何合理方便的方法来识别由隐式委托推理创建的这些对象,以便我可以找到我需要创建/缓存回调以避免垃圾的位置?

解决方法

简而言之,您的问题是“如何找到所有方法组转换?”

我们目前正在开发一个代号为Roslyn的项目,它允许您使用C#编译器和IDE使用的相同语义分析引擎.它将公开语言的语法模型,然后提供语义分析API,通过它您可以提出语义分析器的问题.

使用Roslyn,您可以将所有代码编译为语法树,然后搜索每个表达式的语法树.将有一个API,允许您确定表达式是否转换为任何内容,如果是,转换分析器如何对转换进行分类.

我们目前处于“社区技术预览”阶段;我们有一个初步的实施,但它还没有完全功能.我不记得方法组转换分析器是否在CTP版本中实现.

试一试,如果您对此有任何反馈,我们很乐意听取您对Roslyn论坛的看法.

详细信息:

http://msdn.microsoft.com/en-us/roslyn

相关文章

在项目中使用SharpZipLib压缩文件夹的时候,遇到如果目录较深,则压缩包中的文件夹同样比较深的问题。比...
项目需要,几十万张照片需要计算出每个照片的特征值(调用C++编写的DLL)。 业务流程:选择照片...
var array = new byte[4]; var i = Encoding.UTF8.GetBytes(100.ToString("x2"));//...
其实很简单,因为Combox的Item是一个K/V的object,那么就可以把它的items转换成IEnumerable<Dic...
把.net4.6安装包打包进安装程序。 关键脚本如下: 头部引用字符串对比库 !include "WordFunc....
项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.NetʿreeSp...