Cómo manejar la verificación de nulos para operaciones de códigos de barras en C
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 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
Use el patrón guardián de IronBarcode para verificar con seguridad la colección BarcodeResults antes de acceder a cualquier propiedad del resultado. Empieza de inmediato con esta breve lectura y revisión:
-
Instala IronBarcode con el Administrador de Paquetes NuGet
PM > Install-Package BarCode -
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); -
Despliegue para probar en su entorno real
Comienza a usar IronBarcode en tu proyecto hoy mismo con una prueba gratuita
Cómo gestionar la comprobación de valores nulos en operaciones con códigos de barras con IronBarcode
- Descargar la biblioteca IronBarcode desde NuGet
- Llama a
BarcodeReader.Ready captura el resultado devuelto porBarcodeResults - Comprueba si hay valores nulos antes de acceder a cualquier resultado
- Valida las propiedades individuales
de BarcodeResultantes de su uso posterior - Establezca
ConfidenceThresholdenBarcodeReaderOptionspara filtrar lecturas de baja calidad en el nivel de escaneo
¿Cómo manejar resultados de código de barras nulos y vacíos?
Existen dos modos de falla: 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 de éxito) y una imagen en blanco que no contiene código de barras (camino de falla).
shipping-label.png (ruta de éxito)
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}");
}
Imports IronBarCode
' BarcodeReader.Read() returns a BarcodeResults collection, not a single result
Dim results As BarcodeResults = 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 Nothing OrElse results.Count = 0 Then
' Log, return a default, or throw a domain-specific exception
Console.WriteLine("No barcodes found in the input image.")
Return
End If
' Collection is safe to iterate; each BarcodeResult holds one decoded barcode
For Each result As BarcodeResult 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) Then
Console.WriteLine($"Empty value detected for {result.BarcodeType}")
Continue For
End If
' BarcodeType identifies the symbology (Code128, QRCode, EAN8, etc.)
Console.WriteLine($"Type: {result.BarcodeType}, Value: {result.Value}")
Next
Cada BarcodeResult proporciona propiedades de cadena Value y Text, ambas devuelven el contenido decodificado del código de barras. Los Barcodes muy dañados o los escaneos parciales pueden generar valores vacíos o espacios en blanco. Use string.IsNullOrWhiteSpace en cada resultado para evitar que los valores vacíos lleguen a los sistemas posteriores.
BarcodeReaderOptions también tiene una propiedad ConfidenceThreshold (0.0 a 1.0) que elimina 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}");
Imports 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.
Dim options As New BarcodeReaderOptions With {
.ConfidenceThreshold = 0.7 ' range 0.0 to 1.0; lower values accept weaker signals
}
Dim results As BarcodeResults = 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 Nothing OrElse results.Count = 0 Then
Console.WriteLine("No barcodes met the confidence threshold.")
Return
End If
For Each result In results
Console.WriteLine($"Type: {result.BarcodeType}, Value: {result.Value}")
Next
¿Cómo aplicar patrones seguros con nulos al escribir códigos de barras?
BarcodeWriter.CreateBarcode toma un valor de cadena y un BarcodeWriterEncoding o 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:
: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");
Imports IronBarCode
' Input may arrive from user input, a database, or an API response
Dim inputValue As String = GetValueFromUserOrDatabase() ' Could be Nothing
' Guard: null, empty, or whitespace input cannot produce a valid barcode
If String.IsNullOrWhiteSpace(inputValue) Then
Console.WriteLine("Cannot generate barcode: input value is null or empty.")
Return
End If
' Guard: format-specific constraints must be satisfied before encoding
' EAN-8 accepts exactly 7 or 8 numeric digits (the 8th is the check digit)
Dim encoding As BarcodeWriterEncoding = BarcodeWriterEncoding.EAN8
If encoding = BarcodeWriterEncoding.EAN8 AndAlso Not System.Text.RegularExpressions.Regex.IsMatch(inputValue, "^\d{7,8}$") Then
Console.WriteLine("EAN-8 requires exactly 7 or 8 numeric digits.")
Return
End If
' Input is validated; CreateBarcode will not throw for null or format mismatch
Dim barcode As GeneratedBarcode = 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.
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 objetivo de lectura para el 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
}
Imports IronBarCode
Imports System.Collections.Generic
Imports 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 Module BarcodeValidator
Public Function GetValidResults(
imagePath As String,
Optional expectedType As BarcodeEncoding? = Nothing,
Optional confidenceThreshold As Double = 0.7) As List(Of BarcodeResult)
' Apply confidence threshold at scan level via BarcodeReaderOptions
Dim options As New BarcodeReaderOptions With {
.ConfidenceThreshold = confidenceThreshold
}
Dim results As BarcodeResults = BarcodeReader.Read(imagePath, options)
' Return empty list instead of null so callers never need to null-check the return value
If results Is Nothing OrElse results.Count = 0 Then
Return New List(Of BarcodeResult)()
End If
Return results _
.Where(Function(r) Not String.IsNullOrWhiteSpace(r.Value)) _ ' skip results with empty decoded data
.Where(Function(r) expectedType Is Nothing OrElse r.BarcodeType = expectedType) _ ' null accepts any symbology
.ToList()
End Function
End Module
' Usage: pass the image path and the symbology you expect
Dim validated = BarcodeValidator.GetValidResults(
"warehouse-scan.png",
expectedType:=BarcodeEncoding.Code128,
confidenceThreshold:=0.7)
If validated.Count = 0 Then
' No valid results; log the failure and skip downstream processing
Return
End If
' All results have passed null, empty, type, and confidence checks
For Each barcode In validated
SendToInventorySystem(barcode.Value, barcode.BarcodeType.ToString()) ' placeholder for your downstream call
Next barcode
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 escaneo recoge 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 reduce el escaneo a las simbologías esperadas de antemano, de modo que menos resultados no deseados llegan al validador.
Más información
- Tutorial de lectura de BarCodes: configuración del escáner y opciones de lectura.
- Guía de formatos de salida de datos: todas las propiedades
BarcodeResulty sus tipos. - Crear BarCode a partir de datos: restricciones de codificación para cada simbología.
- Referencia de la API de BarcodeReaderOptions: documentación completa de configuración.
- Registro de cambios de IronBarcode: correcciones específicas de la versión y nuevas funciones.
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.
¿Cómo puede IronBarcode ayudar a mejorar la eficiencia de los procesos de negocio?
IronBarcode mejora la eficiencia de los procesos de negocio al permitir la generación y lectura rápida y precisa de códigos de barras, reduciendo errores de entrada de datos manuales y mejorando el seguimiento de inventario y activos.
¿Qué habilidades de programación se necesitan para implementar IronBarcode en un proyecto?
El conocimiento básico de programación en C# es suficiente para implementar IronBarcode en un proyecto, ya que proporciona métodos sencillos y documentación completa para guiar a los desarrolladores.
¿Es IronBarcode adecuado para tanto proyectos pequeños como aplicaciones empresariales grandes?
IronBarcode está diseñado para ser escalable y versátil, haciéndolo adecuado para proyectos pequeños, así como para aplicaciones empresariales grandes que requieren soluciones robustas de códigos de barras.

