All Failures Collected

Unlike if/throw validation, every rule is always evaluated — all failures surface together:

if (!result.IsSuccess)
{
    foreach (var error in result.Errors)
        Console.WriteLine($"{error.Message}");
    // Outputs all failures in one pass
}