C#idiomatic C#
ca1513fundamentals/code-analysis/quality-rules

Code analysis

CA1513: Use ObjectDisposedException throw helper

Learn about code analysis rule CA1513: Use ObjectDisposedException throw helper

CA1513 Maintainability enabled by default in .NET 10: As suggestion
Fix is breaking or non-breaking Non-BreakingApplicable languages C# and Visual Basic

Cause

Code checks if an object is disposed and then conditionally throws an System.ObjectDisposedException.

Rule description

Object checks have a substantial impact on code size and often dominate the code for small functions and property setters. These checks prevent inlining and cause substantial instruction-cache pollution. Throw-helper methods such as System.ObjectDisposedException.ThrowIf are simpler and more efficient than if blocks that construct a new exception instance.

Example

The following code snippet shows a violation of CA1513:

csharp
class C
{
    private bool _disposed = false;
    void M()
    {
        if (_disposed)
            throw new ObjectDisposedException(GetType().Name);
    }
}

The following code snippet shows the fix:

csharp
class C
{
    private bool _disposed = false;
    void M()
    {
        ObjectDisposedException.ThrowIf(_disposed, this);
    }
}

How to fix violations

Replace the if block that throws the exception with a call to System.ObjectDisposedException.ThrowIf. Or, in Visual Studio, use the lightbulb menu to fix your code automatically.

When to suppress warnings

It's safe to suppress a violation of this rule if you're not concerned about the maintainability of your code. It is also fine to suppress violations that are identified to be false positives.

Suppress a warning

If you just want to suppress a single violation, add preprocessor directives to your source file to disable and then re-enable the rule.

csharp
#pragma warning disable CA1513
// The code that's violating the rule is on this line.
#pragma warning restore CA1513

To disable the rule for a file, folder, or project, set its severity to none in the configuration file.

ini
[*.{cs,vb}]
dotnet_diagnostic.CA1513.severity = none

For more information, see How to suppress code analysis warnings.