IRONSOFTWAREHOME

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

Curtis Chau
Curtis Chau
Updated: 9 de mayo de 2026

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, vacía o en un formato invá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 la colección sin verificar valores nulos o vacíos puede causar un NullReferenceException en tiempo de ejecución. Pasar cadenas inválidas a la API de escritura puede resultar en un 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 cómo explica cómo manejar resultados nulos y vacíos en operaciones de lectura y escritura de IronBarcode utilizando 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 guardia de IronBarcode para verificar de forma segura la colección BarcodeResults antes de acceder a cualquier propiedad de resultado. Empieza de inmediato con esta breve lectura y revisión:

  1. 1Install IronBarcode with NuGet Package Manager

    PM > Install-Package BarCode

  2. 2Copie 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);
    C#
  3. 3Despliegue 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 vacío si la imagen no contiene códigos de barras. Acceder a First, Value, o iterar sin verificar ambas condiciones causará 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 de código de barras Code128 (camino exitoso) y una imagen en blanco que no contiene ningún código de barras (camino de fallo).

Código de barras Code128 que codifica SHP-20240001 utilizado como entrada de etiqueta de envío

shipping-label.png (ruta de éxito)

Imagen en blanco sin código de barras utilizada para activar la ruta de resultado vacío

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

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}");
}

Cada BarcodeResult proporciona propiedades de cadena Value y Text, ambas devolviendo el contenido del código de barras decodificado. 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 valores vacíos lleguen a los sistemas posteriores.

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

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}");

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

BarcodeWriter.CreateBarcode toma un valor de cadena y un BarcodeWriterEncoding o un enum BarcodeEncoding. Pasar un valor nulo o una cadena vacía provoca un error inmediato. También se aplican restricciones de formato: EAN-8 acepta de 7 a 8 dígitos numéricos, UPC-A acepta 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:

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");

Resultado

Una entrada válida de 7 dígitos (1234567) produce un código de barras 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 almacén de código de barras Code128 utilizado como el 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
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
}

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 impide que el sistema posterior reciba formatos inesperados cuando un escaneo capta tanto un código QR como un Code 128 de 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 de antemano, por lo que menos resultados no deseados llegan 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.

How does IronBarcode's reusable validator pattern work?

IronBarcode's reusable validator pattern consolidates null checks, empty checks, value integrity, and expected format validation into a single method, simplifying the validation process before results are used downstream.

What are some constraints that BarcodeWriterEncoding handles during barcode creation?

BarcodeWriterEncoding imposes constraints like string length and character validity based on the barcode type. For example, EAN-8 must have 7 or 8 numeric digits. Correctly formatted input avoids exceptions during encoding.

How does IronBarcode ensure the quality of scanned barcodes?

IronBarcode uses properties such as ConfidenceThreshold in BarcodeReaderOptions to ensure only high-quality barcodes are included in results. This pre-scanning filter means low-quality reads are discarded before further processing.

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 estructurados y visualmente atractivos.

...
Leer más

¿Listo para empezar?

Nuget Downloads 2,422,100Versión:2026.9recién lanzado

Obtenga su Clave de Prueba de 30 días gratis al instante.
No se requiere tarjeta de crédito ni creación de cuenta
Biblioteca C# NuGet para PDF
Instalar con NuGet

Versión: 2026.9

PM > Install-Package BarCode
nuget.org/packages/BarCode/
  1. En el Explorador de Soluciones, haga clic derecho en Referencias, Administrar Paquetes NuGet
  2. Seleccione Examinar y busque "IronBarcode"
  3. Seleccione el paquete e instale
C# PDF DLL
Descargar DLL

Versión: 2026.9

  1. Descargue y descomprima IronBarCode en una ubicación como ~/Libs dentro de su directorio de Solución
  2. En el Explorador de Soluciones de Visual Studio, haga clic derecho en Referencias. Seleccione Examinar, "IronBarcode.dll"

Licencias desde $999

Key in blue circle

Obtenga su clave de prueba gratuita de 30 días al instante.

Your trial license will be sent to your email address

Sin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.

bullet_checkedNo se requiere tarjeta de crédito ni creación de cuentaSin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Reserve su Demostración en Vivo gratuita
Booking Badge

Confiado por millones de ingenieros en todo el mundo

Logos de clientes de Iron Software
Obtén tu Consulta Sin Compromiso
Completa el formulario a continuación o envía un correo a sales@ironsoftware.com
Tus detalles siempre serán mantenidos confidenciales.
Confiado por millones de ingenieros en todo el mundo
Logos de clientes de Iron Software
Obtenga su Clave de Prueba de 30 días gratis al instante.
No se requiere tarjeta de crédito ni creación de cuenta