Cómo manejar la verificación de nulos para operaciones de códigos de barras en C

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronBarcode devuelve los resultados del escaneo como una colección BarcodeResults en C# a través de BarcodeReader.Read. Este método devuelve null si no se reconoce la imagen de entrada, o una colección vacía si no se detectan BarCodes. BarcodeWriter.CreateBarcode lanza una excepción si la entrada es nula, está vacía o tiene un formato no válido.

Las fuentes de escaneo del mundo real, como las imágenes de cámaras, las subidas de documentos y los escáneres de almacén, pueden no proporcionar siempre un BARCODE legible. Acceder a las propiedades del resultado o iterar por la colección sin comprobar si hay valores nulos o vacíos puede provocar un NullReferenceException en tiempo de ejecución. Pasar cadenas no válidas a la API de escritura puede dar lugar a una excepción ArgumentException. El uso de cláusulas de protección tanto en operaciones de lectura como de escritura ayuda a prevenir estas excepciones en producción.

Este tutorial explica cómo gestionar los resultados nulos y vacíos en las operaciones de lectura y escritura de IronBarcode mediante el uso de cláusulas de protección, filtrado de confianza y un patrón de validador reutilizable.


Inicio rápido: Manejar resultados nulos en operaciones de códigos de barras

Utilice el patrón de protección de IronBarcode para comprobar de forma segura la colección BarcodeResults antes de acceder a cualquier propiedad de los resultados. Empieza de inmediato con esta breve lectura y revisión:

  1. Instala IronBarcode con el Administrador de Paquetes NuGet

    PM > Install-Package BarCode
  2. Copie y ejecute este fragmento de código.

    using IronBarCode;
    
    BarcodeResults results = BarcodeReader.Read("label.png");
    
    // Guard: null or empty
    if (results is null || results.Count == 0)
    {
        Console.WriteLine("No barcodes detected.");
        return;
    }
    
    Console.WriteLine(results.First().Value);
  3. Despliegue para probar en su entorno real

    Comienza a usar IronBarcode en tu proyecto hoy mismo con una prueba gratuita

    arrow pointer

¿Cómo manejar resultados de código de barras nulos y vacíos?

Hay dos modos de fallo: BarcodeResults es nulo si la entrada no es una imagen válida, y está vacío si la imagen no contiene BarCodes. Acceder a First, Value o iterar sin verificar ambas condiciones provocará una excepción en tiempo de ejecución.

Comprueba ambas condiciones antes de entrar en el bucle de procesamiento:

Entrada

Una etiqueta de envío con BarCode Code128 (ruta de éxito) y una imagen en blanco sin BarCode (ruta de error).

Code128 barcode encoding SHP-20240001 used as the shipping label input

shipping-label.png (ruta de éxito)

Blank white image with no barcode used to trigger the empty result path

blank-image.png (ruta de error, no hay BarCode)

:path=/static-assets/barcode/content-code-examples/how-to/null-checking/null-guard.cs
using IronBarCode;

// BarcodeReader.Read() returns a BarcodeResults collection, not a single result
BarcodeResults results = BarcodeReader.Read("shipping-label.png");

// Null check: image was not recognized as a valid image source
// Empty check: image was valid but contained no detectable barcodes
if (results is null || results.Count == 0)
{
    // Log, return a default, or throw a domain-specific exception
    Console.WriteLine("No barcodes found in the input image.");
    return;
}

// Collection is safe to iterate; each BarcodeResult holds one decoded barcode
foreach (BarcodeResult result in results)
{
    // Guard individual result properties; partial scans or severely
    // damaged barcodes can produce results where .Value is empty or whitespace
    if (string.IsNullOrWhiteSpace(result.Value))
    {
        Console.WriteLine($"Empty value detected for {result.BarcodeType}");
        continue;
    }

    // BarcodeType identifies the symbology (Code128, QRCode, EAN8, etc.)
    Console.WriteLine($"Type: {result.BarcodeType}, Value: {result.Value}");
}
$vbLabelText   $csharpLabel

Cada BarcodeResult proporciona las propiedades de cadena Value y Text, que devuelven el contenido descodificado del BARCODE. Los Barcodes muy dañados o los escaneos parciales pueden generar valores vacíos o espacios en blanco. Utilice string.IsNullOrWhiteSpace en cada resultado para evitar que los valores vacíos lleguen a los sistemas posteriores.

BarcodeReaderOptions también tiene una propiedad ConfidenceThreshold (de 0,0 a 1,0) que descarta las lecturas de baja calidad antes de que lleguen a la colección de resultados:

:path=/static-assets/barcode/content-code-examples/how-to/null-checking/confidence-filter.cs
using IronBarCode;

// ConfidenceThreshold filters low-quality reads before they enter the
// BarcodeResults collection. Reads below the threshold are discarded
// during scanning, not after, so no post-filtering of the collection is needed.
var options = new BarcodeReaderOptions
{
    ConfidenceThreshold = 0.7  // range 0.0 to 1.0; lower values accept weaker signals
};

BarcodeResults results = BarcodeReader.Read("shipping-label.png", options);

// Still check for null and empty even with a threshold applied;
// an image with no barcodes returns an empty collection, not null
if (results is null || results.Count == 0)
{
    Console.WriteLine("No barcodes met the confidence threshold.");
    return;
}

foreach (var result in results)
    Console.WriteLine($"Type: {result.BarcodeType}, Value: {result.Value}");
$vbLabelText   $csharpLabel

¿Cómo aplicar patrones seguros con nulos al escribir códigos de barras?

BarcodeWriter.CreateBarcode toma un valor de cadena y una enumeración BarcodeWriterEncoding o BarcodeEncoding. Pasar un valor nulo o una cadena vacía provoca un error inmediato. También se aplican restricciones de formato: EAN-8 admite de 7 a 8 dígitos numéricos, UPC-A admite de 11 a 12, y Code 128 tiene un límite de caracteres. La validación de la entrada antes de la llamada evita que estas excepciones se produzcan en la etapa de codificación:

:path=/static-assets/barcode/content-code-examples/how-to/null-checking/null-safe-write.cs
using IronBarCode;

// Input may arrive from user input, a database, or an API response
string inputValue = GetValueFromUserOrDatabase(); // Could be null

// Guard: null, empty, or whitespace input cannot produce a valid barcode
if (string.IsNullOrWhiteSpace(inputValue))
{
    Console.WriteLine("Cannot generate barcode: input value is null or empty.");
    return;
}

// Guard: format-specific constraints must be satisfied before encoding
// EAN-8 accepts exactly 7 or 8 numeric digits (the 8th is the check digit)
BarcodeWriterEncoding encoding = BarcodeWriterEncoding.EAN8;
if (encoding == BarcodeWriterEncoding.EAN8 && !System.Text.RegularExpressions.Regex.IsMatch(inputValue, @"^\d{7,8}$"))
{
    Console.WriteLine("EAN-8 requires exactly 7 or 8 numeric digits.");
    return;
}

// Input is validated; CreateBarcode will not throw for null or format mismatch
GeneratedBarcode barcode = BarcodeWriter.CreateBarcode(inputValue, encoding);
barcode.SaveAsPng("output-barcode.png");
$vbLabelText   $csharpLabel

Resultado

Una entrada válida de 7 dígitos (1234567) genera un BARCODE EAN-8 escaneable. Las entradas nulas, vacías o no numéricas son detectadas por las cláusulas de protección y nunca llegan a la etapa de codificación.

BarCode EAN-8 generado a partir de la entrada válida de 7 dígitos 1234567

La API de escritura también realiza su propia validación interna: comprueba las sumas de comprobación, verifica las restricciones de longitud y rechaza los caracteres no válidos para la codificación seleccionada. Las cláusulas de protección anteriores detectan los problemas antes, lo que permite al autor de la llamada controlar el mensaje de error y la ruta de recuperación. Para una lista completa de codificaciones soportadas y sus restricciones, vea el cómo crear un código de barras y la guía crear un código de barras a partir de datos.


¿Cómo validar resultados antes del procesamiento posterior?

Cuando los datos de los BarCode se introducen en otro sistema (una escritura en una base de datos, una llamada a una API, una impresora de etiquetas), resulta útil consolidar el recuento de resultados, la integridad de los valores y las comprobaciones de tipo en un único método reutilizable antes de pasar los datos:

Entrada

Un escaneo de BarCode Code128 en un almacén utilizado como objetivo de lectura para el validador.

Codificación de BarCode Code128 WH-SCAN-4471 utilizada como entrada de escaneo de almacén para el ejemplo del validador
:path=/static-assets/barcode/content-code-examples/how-to/null-checking/barcode-validator.cs
using IronBarCode;
using System.Collections.Generic;
using System.Linq;

// Reusable validation helper — consolidates null, empty, value, and
// expected-format checks into a single method. Returns an empty list
// (never null) so callers do not need to null-check the return value.
public static class BarcodeValidator
{
    public static List<BarcodeResult> GetValidResults(
        string imagePath,
        BarcodeEncoding? expectedType = null,
        double confidenceThreshold = 0.7)
    {
        // Apply confidence threshold at scan level via BarcodeReaderOptions
        var options = new BarcodeReaderOptions
        {
            ConfidenceThreshold = confidenceThreshold
        };

        BarcodeResults results = BarcodeReader.Read(imagePath, options);

        // Return empty list instead of null so callers never need to null-check the return value
        if (results is null || results.Count == 0)
            return new List<BarcodeResult>();

        return results
            .Where(r => !string.IsNullOrWhiteSpace(r.Value))           // skip results with empty decoded data
            .Where(r => expectedType == null || r.BarcodeType == expectedType) // null accepts any symbology
            .ToList();
    }
}

// Usage: pass the image path and the symbology you expect
var validated = BarcodeValidator.GetValidResults(
    "warehouse-scan.png",
    expectedType: BarcodeEncoding.Code128,
    confidenceThreshold: 0.7);

if (validated.Count == 0)
{
    // No valid results; log the failure and skip downstream processing
    return;
}

// All results have passed null, empty, type, and confidence checks
foreach (var barcode in validated)
{
    SendToInventorySystem(barcode.Value, barcode.BarcodeType.ToString()); // placeholder for your downstream call
}
$vbLabelText   $csharpLabel

El método devuelve una lista vacía en lugar de null, por lo que los usuarios nunca tienen que comprobar si el valor devuelto es null. El parámetro opcional expectedType filtra por simbología, lo que evita que el sistema posterior reciba formatos inesperados cuando un escáner detecta tanto un código QR como un Código 128 en la misma imagen.

Para la lectura por lotes de varios archivos, aplique el mismo patrón por archivo y agregue los resultados. La opción ExpectBarcodeTypes en BarcodeReaderOptions limita el escaneo a las simbologías esperadas desde el principio, por lo que llegan menos resultados no deseados al validador.


Más información

Consulte las opciones de licencia cuando el proceso esté listo para la producción.

Preguntas Frecuentes

¿Qué es la verificación de nulos en operaciones de códigos de barras?

La verificación de nulos en operaciones de códigos de barras implica verificar si un resultado o entrada de código de barras es nulo para prevenir errores de ejecución y asegurar un procesamiento fluido de códigos de barras.

¿Por qué es importante la verificación de nulos en operaciones de códigos de barras en C#?

La verificación de nulos es crucial en operaciones de códigos de barras en C# para evitar excepciones y asegurar que la aplicación pueda manejar con gracia los casos donde los datos del código de barras puedan faltar o ser inválidos.

¿Cómo puede IronBarcode asistir con la verificación de nulos?

IronBarcode proporciona métodos integrados para manejar fácilmente las verificaciones de nulos, permitiendo a los desarrolladores gestionar de manera segura los datos de códigos de barras sin implementar manualmente una lógica de validación compleja.

¿Cuáles son algunas prácticas recomendadas para la verificación de nulos en IronBarcode?

Las mejores prácticas incluyen verificar BarcodeResults para valores nulos, validar las entradas antes de procesarlas y usar filtros de confianza para asegurar resultados confiables en el escaneo de códigos de barras.

¿Puede IronBarcode filtrar resultados por confianza para evitar salidas nulas?

Sí, IronBarcode permite filtrar resultados de códigos de barras por niveles de confianza, lo que ayuda a reducir salidas nulas y asegura una alta precisión en la lectura de códigos de barras.

¿Hay alguna forma de validar las entradas de escritura usando IronBarcode?

IronBarcode permite la validación de las entradas de escritura para asegurar que los datos codificados en los códigos de barras sean correctos y completos, previniendo problemas durante la generación de códigos de barras.

¿Qué pasa si un resultado nulo de un código de barras no se maneja?

Si un resultado nulo de un código de barras no se maneja, puede llevar a excepciones en tiempo de ejecución y perturbar el flujo de la aplicación, causando posibles fallos o operaciones incorrectas.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más
¿Listo para empezar?
Nuget Descargas 2,121,847 | Versión: 2026.3 recién lanzado
Still Scrolling Icon

¿Aún desplazándote?

¿Quieres una prueba rápida? PM > Install-Package BarCode
ejecuta una muestra observa cómo tu cadena se convierte en un código de barras.