Extensions API Reference¶
Overview¶
The ResultExtensions
class provides extension methods for working with Result<T>
and ValidationResult
types. These methods enable functional programming patterns and make working with results more convenient.
Result Extensions¶
ToResult¶
public static Result<T> ToResult<T>(this T value)
Tap¶
public static Result<T> Tap<T>(this Result<T> result, Action<T> action)
TapError¶
public static Result<T> TapError<T>(this Result<T> result, Action<Error> action)
Select¶
public static Result<TResult> Select<T, TResult>(this Result<T> result, Func<T, TResult> selector)
SelectMany¶
public static Result<TResult> SelectMany<T, TResult>(this Result<T> result, Func<T, Result<TResult>> selector)
Where¶
public static Result<T> Where<T>(this Result<T> result, Func<T, bool> predicate, string errorMessage)
public static Result<T> Where<T>(this Result<T> result, Func<T, bool> predicate, Error error)
Validate¶
public static Result<T> Validate<T>(this Result<T> result, Func<T, ValidationResult> validator)
TransformError¶
public static Result<T> TransformError<T>(this Result<T> result, Func<Error, Error> transformer)
GetValueOr¶
public static T GetValueOr<T>(this Result<T> result, T defaultValue)
public static T GetValueOr<T>(this Result<T> result, Func<T> defaultValueFactory)
GetValueOrAsync¶
public static Task<T> GetValueOrAsync<T>(this Result<T> result, Func<Task<T>> defaultValueFactory)
ValidationResult Extensions¶
ToResult¶
public static Result<T> ToResult<T>(this ValidationResult validationResult, T value)
Combine¶
public static ValidationResult Combine(this ValidationResult first, ValidationResult second)
Examples¶
Working with Results¶
// Convert value to result
var result = "Hello".ToResult();
// Tap into success
result = result.Tap(value => Console.WriteLine(value));
// Transform value
var lengthResult = result.Select(s => s.Length);
// Filter value
var nonEmptyResult = result.Where(s => s.Length > 0, "String cannot be empty");
// Validate value
var validatedResult = result.Validate(value =>
ValidationResult.Create()
.AddError("Name", "Name is required")
);
// Transform error
var transformedError = result.TransformError(error =>
Error.Create(ErrorCode.InternalError, error.Message)
);
// Get value or default
var value = result.GetValueOr("Default");
Working with Validation Results¶
// Create validation results
var first = ValidationResult.Create()
.AddError("Name", "Name is required");
var second = ValidationResult.Create()
.AddError("Email", "Email is invalid");
// Combine validation results
var combined = first.Combine(second);
// Convert to result
var result = combined.ToResult(new User());