This page is not yet available in Spanish. We are working on its translation.
If you have any questions or feedback about our current translation project, feel free to reach out to us!

Metadata

ID: csharp-best-practices/exception-constructors

Language: C#

Severity: Warning

Category: Best Practices

Description

This rule stipulates that when creating a custom exception by inheriting from the Exception class, all the constructors of the base Exception class should be implemented. This is important because it ensures that your custom exception behaves consistently with the built-in exceptions in C#. By doing so, you provide more flexibility for the code that throws your exception, allowing it to pass along a message, an inner exception, or both, which can be extremely helpful when debugging.

Non-compliance with this rule can lead to unexpected behavior and make debugging difficult, as some information might not be propagated correctly when the exception is thrown.

How to remediate?

To fix this rule always implement the following three constructors when creating a custom exception: a parameterless constructor, a constructor that takes a string message, and a constructor that takes a string message and an inner exception. For example:

public class MyException : Exception
{
    public MyException() : base()
    {
    }

    public MyException(string message) : base(message)
    {
    }

    public MyException(string message, Exception innerException) : base(message, innerException)
    {
    }
}

By following this practice, you ensure that your custom exceptions can be used just like any other exceptions in C#.

Non-Compliant Code Examples

public class MyException : Exception
{
}

Compliant Code Examples

public class MyException : Exception
{
    public MyException() : base()
    {
    }

    public MyException(string message) : base(message)
    {
    }

    public MyException(string message, Exception innerException) : base(message, innerException)
    {
    }
}
https://static.datadoghq.com/static/images/logos/github_avatar.svg https://static.datadoghq.com/static/images/logos/vscode_avatar.svg jetbrains

Integraciones sin problemas. Prueba Datadog Code Security

PREVIEWING: guillaume.barrier/ERRORT-5095-general-doc-update