代码检查:属性的返回值必须由被调用方处理
如果您在调用代码中使用了 [MustDisposeResourceAttribute] (来自 JetBrains.Annotations )来 强制资源处理 ,JetBrains Rider 会报告直接从带注释的来源返回资源的属性。 这意味着 API 的用户必须处理每次使用该属性时创建的可释放资源。 示例如下:
[MustDisposeResource]
public class HasNativeResources : IDisposable
{
private IDisposable _resource;
public void DoTaskOne() {/*do something with _resource*/}
public void DoTaskTwo() {/*do something with _resource*/}
public void Dispose() => _resource.Dispose();
}
public class Item
{
// The potential problem is reported here
public HasNativeResources Resource => new HasNativeResources();
}
public class Test
{
public Test()
{
var item = new Item();
// Resource leak can happen here if the resource is not properly handled
item.Resource.DoTaskOne();
item.Resource.DoTaskTwo();
}
}
有两种解决此问题的常规方法:
向 API 用户传达该属性不是对象的一部分。 例如,可以通过 将属性转换为方法来实现。
使属性成为对象的一部分,并在内部处理资源。 例如,可以通过为属性添加一个后备字段,并在对象的
Dispose()方法中处理它来实现。
最后修改日期: 2025年 9月 26日