Skip to content

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 ​

NecesidadAPIAlcance
Saber si hay un error de un tipoHasError<T>()Raíz y descendientes
Obtener el primer errorFindError<T>()Raíz y descendientes
Obtenerlo y comprobar su presenciaTryGetError<T>(out var error)Raíz y descendientes
Saber si hay una razón de un tipoHasReason<T>()Descendientes
Obtener la primera razónFindReason<T>()Descendientes
Obtenerla y comprobar su presenciaTryGetReason<T>(out var reason)Descendientes
Enumerar erroresErrorsOfType<T>()Hojas, incluida la raíz si es hoja
Enumerar razonesReasonsOfType<T>()Hojas descendientes
Enumerar cualquier nodo compatibleNodesOfType<T>()Hojas, incluida la raíz si es hoja
Recorrer ramas, hijos o rutasTreeTraversalSegú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… devuelve null cuando no encuentra coincidencias.
  • Has… devuelve false.
  • TryGet… devuelve false y asigna null al 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 ​

  1. Buscar errores por tipo: primera coincidencia, agregados y excepciones.
  2. Buscar razones: tipos dinámicos, tipados y metadatos.
  3. Enumerar coincidencias: hojas, nodos intermedios y LINQ.
  4. Recorrer árboles y navegar: ramas, rutas y pertenencia.
  5. Migrar consultas desde Result: acceso seguro a Error.

Uso personal limitado. Uso comercial sujeto a autorización escrita.