如果可能的话,我想要一个resharper模式来检测未处理的IDisposable。如果我有方法
IDisposable Subscribe(...){....}
并且在没有分配和使用该IDisposable的情况下调用它我希望被告知它。我尝试过以下模式
;$expr$;
其中expr
的类型为IDisposable
。发生以下情况。
第一个被正确检测但第二个是错误,因为对现有变量的简单赋值也是C#中的表达式,而使用var
的赋值则不是。是否可以检测到通过结构搜索分配了返回值?
我注意到resharper具有以下代码质量选项
但我猜它们是用比结构化搜索解析器更复杂的东西构建的。
答案 0 :(得分:1)
不幸的是,结构搜索和替换无法做到这一点。首先,没有构造可以匹配缺少某些东西,因此没有办法匹配没有返回值赋值的方法调用。
正如您所注意到的,有些检查可以跟踪不使用返回值的纯函数,而且它们不是用SSR实现的。您可以通过对其应用[Pure]
属性将它们应用于您的方法。但是,这意味着该方法实际上是纯粹的,即没有副作用,因此在这种情况下可能是错误的语义。