Apariencia
Buscar errores y razones
Las consultas pertenecen a platform.errors. Se invocan sobre un Error, mediante extensiones de Greencore.Platform.Errors.Extensions. No necesitas un Result para consultar un diagnóstico.
csharp
using Greencore.Platform.Errors;
using Greencore.Platform.Errors.Extensions;
var error = Error.Create("Importación fallida.")
.WithReason(new Reason("Fila inválida.")
.WithReason(new Reason("Nombre obligatorio.")));
Console.WriteLine(error.HasError<Error>()); // True: incluye la raíz.
Console.WriteLine(error.HasReason<Reason>()); // True: busca descendientes.Elegir la operación
| Necesidad | API | Alcance |
|---|---|---|
| Saber si hay un error de un tipo | HasError<T>() | Raíz y descendientes |
| Obtener el primer error | FindError<T>() | Raíz y descendientes |
| Obtenerlo y comprobar su presencia | TryGetError<T>(out var error) | Raíz y descendientes |
| Saber si hay una razón de un tipo | HasReason<T>() | Descendientes |
| Obtener la primera razón | FindReason<T>() | Descendientes |
| Obtenerla y comprobar su presencia | TryGetReason<T>(out var reason) | Descendientes |
| Enumerar errores | ErrorsOfType<T>() | Hojas, incluida la raíz si es hoja |
| Enumerar razones | ReasonsOfType<T>() | Hojas descendientes |
| Enumerar cualquier nodo compatible | NodesOfType<T>() | Hojas, incluida la raíz si es hoja |
| Recorrer ramas, hijos o rutas | TreeTraversal | Según el método |
Los métodos singulares incluyen nodos intermedios. Los tres métodos …OfType<T>() aceptan includeNonTerminal: true para incluirlos.
Qué significa «razón» en una consulta
Error.Reasons contiene hijos inmediatos. Las consultas de razones buscan todos los descendientes, no solo esos hijos. Pueden encontrar un error referenciado si es compatible con el tipo solicitado.
FindError<T> exige T : Error. Las consultas de razones y nodos aceptan T : class, INode: por ejemplo, Reason, IReasonNode, Error o INode.
La coincidencia es por compatibilidad de tipos, como OfType<T>(): incluye clases derivadas e implementaciones de interfaces. No compara mensajes ni exige igualdad exacta de tipo.
Orden, ausencia e identidad
El recorrido es en profundidad y preorden: primero el nodo, luego cada rama según el orden de Reasons. «Primero» significa la primera coincidencia en ese recorrido, no el nodo más cercano a la raíz.
Find…devuelvenullcuando no encuentra coincidencias.Has…devuelvefalse.TryGet…devuelvefalsey asignanullal parámetro de salida.- Las enumeraciones sin coincidencias están vacías.
- Los objetos encontrados son las instancias originales; no se clonan.
Usa una raíz no nula. Si recibes Error?, comprueba primero su presencia. Una ausencia de coincidencia es distinta de intentar consultar una raíz nula.
Guía por tema
- Buscar errores por tipo: primera coincidencia, agregados y excepciones.
- Buscar razones: tipos dinámicos, tipados y metadatos.
- Enumerar coincidencias: hojas, nodos intermedios y LINQ.
- Recorrer árboles y navegar: ramas, rutas y pertenencia.
- Migrar consultas desde Result: acceso seguro a
Error.