Skip to content

exyi/RecordException

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

C# records inheriting from Exception

Install from NuGet: dotnet add package RecordException

Then define your exceptions like this:

using RecordExceptions;

public record MissingIdException(int id): RecordException;

The exception message will automatically be MissingIdException: id = {id}. Probably fine for debugging, but if you want to customize that, you can:

public record MissingIdException(int id): RecordException
{
    public override string Message => $"Id {id} is missing";
}

The message may also be specified in the construtor:

public record OperationCancelledException: RecordException("User has cancelled the operation.")

You can also wrap exception into InnerException, it might be useful for adding relevant information:

public record SomethingBad(Exception InnerException): RecordException("Something really bad has happened", InnerException);

Notes:

  • If you are using some parameters in your message, prefer to override the Message property if you want the x with { Prop = newValue } syntax to work.
  • Even when you provide your own message, all properties will be shown bellow the stacktrace. If you don't like this, public override string ToString() => base.ToString();.
  • Don't be too surprised if this stops working with the next C# version 😅. Yes, records are not supposed to inherit from System.Exception. But they forgot to check base type of a base type ;)

License is MIT, so you can use it however you want to. If you need a record inheriting from another class, feel free to fork this repo.

About

Define custom exceptions as C# records.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published