1

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

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

并在不分配和使用 IDisposable 的情况下调用它,我想被告知它。我尝试了以下模式

;$expr$;

哪里expr是类型IDisposable。发生以下情况。

在此处输入图像描述

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

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

在此处输入图像描述

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

4

1 回答 1

1

不幸的是,这不能通过结构搜索和替换来完成。一方面,没有构造可以匹配某些东西的缺失,因此无法匹配没有分配其返回值的方法调用。

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

于 2014-04-03T16:28:29.697 回答