Apariencia
Resultados y composición
Elegir un tipo
| Tipo | Representa |
|---|---|
Result<TValue> | Éxito con un valor no nulo o fallo |
Result | Contrato común de estado y consulta de errores |
VoidResult | Resultado de una operación sin valor de retorno |
EnumerableResult<TItem> | Resultado que se puede enumerar |
AsyncEnumerableResult<TItem> | Resultado que se puede recorrer con await foreach |
StreamResult<TItem> | Suscripción a una fuente de elementos |
Construcción y lectura
csharp
using Greencore.Platform.Errors;
using Greencore.Platform.Results;
var correcto = Result<int>.Ok(42);
var fallido = Result<int>.Fail(new TextError("No se pudo calcular."));
var noEncontrado = Result<int>.Fail<NotFoundProcessError>();
Result guardado = VoidResult.Ok();
if (correcto.TryGetValue(out var valor))
Console.WriteLine(valor);
Console.WriteLine(fallido.ValueOrDefault(-1)); // -1Value lanza InvalidOperationException si el resultado es un fallo. Error hace lo mismo si el resultado es correcto. Ok(null) no es un éxito válido: el valor está restringido a notnull y se comprueba en ejecución.
Transformar, encadenar y responder
Importa Greencore.Platform.Results.Extensions.
| Operación | Uso |
|---|---|
Map | Transformar un valor correcto en otro valor |
Bind | Encadenar una función que devuelve otro resultado |
Match | Resolver explícitamente las ramas de éxito y error |
Tap | Ejecutar un efecto en caso de éxito, conservando el resultado |
TapError | Ejecutar un efecto en caso de fallo |
MapAsync, BindAsync, MatchAsync | Usar funciones que devuelven tareas |
csharp
using Greencore.Platform.Errors;
using Greencore.Platform.Results;
using Greencore.Platform.Results.Extensions;
var resultado = Result<int>.Ok(20)
.Map(valor => valor + 1)
.Bind(valor => valor > 0
? Result<string>.Ok($"Pedido {valor}")
: Result<string>.Fail(new TextError("Identificador inválido.")))
.Tap(texto => Console.WriteLine($"Preparado: {texto}"));
Console.WriteLine(resultado.Match(texto => texto, error => error.Text));Un fallo evita ejecutar la transformación o siguiente operación. Las excepciones lanzadas por tus funciones se propagan: estas extensiones no son una captura automática de excepciones.
Tipos especializados
El namespace Greencore.Platform.Results.Specialized contiene IntResult, LongResult, StringResult, BooleanResult, DecimalResult, DoubleResult, DateTimeResult, GuidResult, ArrayResult<TItem> y ListResult<TItem>.
Estos tipos ofrecen conversiones de conveniencia. Una conversión que extrae el valor puede lanzar si el resultado es un error; prefiere TryGetValue o Match en los límites de tu aplicación. La cobertura del analizador está descrita en estado de la versión.