コードインスペクション: プロパティの戻り値は呼び出し元で破棄する必要があります。
JetBrains.Annotations の [MustDisposeResourceAttribute] を使用して呼び出し元コード内で リソースの破棄を強制している場合、ReSharper はアノテーション付きソースから直接リソースを返すプロパティを報告します。 つまり、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();
}
}
この問題を解決するには、一般的に次の 2 つの方法があります。
プロパティがオブジェクトの一部ではないことを API ユーザーに伝えます。 これは、たとえば プロパティをメソッドに変換することで実行できます。
プロパティをオブジェクトの一部にして、リソースを内部で処理します。 これは、たとえば、プロパティのバッキングフィールドを追加し、それをオブジェクトの
Dispose()メソッドに配置することで実行できます。
2026 年 6 月 12 日