Skip to content

Result<T>

Result pattern for explicit error handling without exceptions.

Properties

PropertyTypeDescription
IsSuccessboolOperation succeeded
IsFailureboolOperation failed
DataT?Success value
ErrorMessagestring?Primary error message
ErrorsIReadOnlyList<string>All error messages
ErrorCodestring?Error categorization code

Factory Methods

MethodDescription
Success(T data)Creates successful result
Failure(string message, string? code)Creates failed result
Failure(IEnumerable<string> errors, string? code)Multiple errors
Failure(Result result)Copy errors from another result

Instance Methods

MethodDescription
Map<TNew>(Func<T, TNew>)Transform success value
OnSuccess(Action<T>)Execute if successful
OnFailure(Action<IReadOnlyList<string>>)Execute if failed
GetValueOrDefault(T?)Get value or default

Usage

csharp
public async Task<Result&lt;User&gt;> CreateUserAsync(CreateUserCommand cmd)
{
    if (await _repo.EmailExistsAsync(cmd.Email))
        return Result&lt;User&gt;.Failure("Email already exists", "EMAIL_EXISTS");

    var user = new User(cmd.Email, cmd.Name);
    await _repo.AddAsync(user);
    return Result&lt;User&gt;.Success(user);
}

Released under the MIT License.