// Boolean guards and TryGet
if (result.IsSuccess) { /* ... */ }
if (result.TryGet(out var user, out var error)) { /* ... */ }
// Collapsing to a value
string message = result.Match(
success: user => $"Welcome, {user.Name}",
failure: error => $"Failed: {error.Message}");
// Side-effecting actions
result.Switch(
success: user => Console.WriteLine(user.Name),
failure: error => Console.WriteLine(error.Message));
// Pattern matching on failure types
return result.Match(
success: user => Results.Ok(user),
failure: error => error switch
{
NotFoundFailure => Results.NotFound(error.Message),
ValidationFailure => Results.BadRequest(error.Message),
UnauthorizedFailure => Results.Forbid(),
_ => Results.Problem(error.Message)
});