Resharper搜索模式,用于检测返回未使用值的方法

时间:2014-04-03 13:38:56

标签: c# resharper structural-search

如果可能的话,我想要一个resharper模式来检测未处理的IDisposable。如果我有方法

 IDisposable Subscribe(...){....}

并且在没有分配和使用该IDisposable的情况下调用它我希望被告知它。我尝试过以下模式

;$expr$;

其中expr的类型为IDisposable。发生以下情况。

enter image description here

第一个被正确检测但第二个是错误,因为对现有变量的简单赋值也是C#中的表达式,而使用var的赋值则不是。是否可以检测到通过结构搜索分配了返回值?

我注意到resharper具有以下代码质量选项

enter image description here

但我猜它们是用比结构化搜索解析器更复杂的东西构建的。

1 个答案:

答案 0 :(得分:1)

不幸的是,结构搜索和替换无法做到这一点。首先,没有构造可以匹配缺少某些东西,因此没有办法匹配没有返回值赋值的方法调用。

正如您所注意到的,有些检查可以跟踪不使用返回值的纯函数,而且它们不是用SSR实现的。您可以通过对其应用[Pure]属性将它们应用于您的方法。但是,这意味着该方法实际上是纯粹的,即没有副作用,因此在这种情况下可能是错误的语义。