public static void Main()
var procedureResult = DoProcedure();
var resultToPrint = procedureResult.Match(_ => "All good!", err => err switch
NetworkingFailure => "NetworkingFailure",
HamsterAteCable => "HamsterAteCable",
InvalidNumber => "InvalidNumber",
Console.WriteLine(resultToPrint);
var procedureResultWithEnum = DoProcedureWithEnum();
var resultToPrintWithEnum = procedureResultWithEnum.Match(_ => "All good!", err => err switch
ProcedureErrorEnum.DbError => "DbError",
ProcedureErrorEnum.NetworkingFailure => "NetworkingFailure",
ProcedureErrorEnum.HamsterAteCable => "HamsterAteCable",
ProcedureErrorEnum.InvalidNumber => "InvalidNumber",
Console.WriteLine(resultToPrintWithEnum);
public enum ProcedureErrorEnum
public abstract record ProcedureError;
public record DbError : ProcedureError;
public record NetworkingFailure : ProcedureError;
public record HamsterAteCable : ProcedureError;
public record InvalidNumber : ProcedureError;
public static Result<Unit, ProcedureError> DoProcedure()
return Result<Unit, ProcedureError>.Error(new DbError());
public static Result<Unit, ProcedureErrorEnum> DoProcedureWithEnum()
return Result<Unit, ProcedureErrorEnum>.Error(ProcedureErrorEnum.DbError);