Como Lidar com Verificação de Nulo para Operações de Código de Barras em C

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

BarcodeReader.Read() retorna uma coleção de BarcodeResults — não um único valor. Essa coleção pode ser nula se a imagem de entrada não for reconhecida ou vazia se nenhum código de barras for detectado. Do lado da escrita, BarcodeWriter.CreateBarcode() lança uma exceção quando passado nulo ou entrada inválida. Ambos os caminhos precisam de cláusulas de proteção antes que o código toque nas propriedades do resultado ou gere saída.

Este guia aborda o tratamento de resultados nulos e vazios para as operações de leitura e escrita do IronBarcode — os padrões defensivos que impedem NullReferenceException e ArgumentException de chegar à produção.

Início Rápido: Lidar com Resultados Nulos em Operações de Código de Barras

Proteja a coleção BarcodeResults para ambos os estados nulo e vazio antes de acessar quaisquer propriedades de resultado para evitar exceções em tempo de execução.

  1. Instale IronBarcode com o Gerenciador de Pacotes NuGet

    PM > Install-Package BarCode
  2. Copie e execute este trecho 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. Implante para testar em seu ambiente de produção.

    Comece a usar IronBarcode em seu projeto hoje com uma avaliação gratuita

    arrow pointer

Como Lidar com Resultados de Código de Barras Nulos e Vazios?

BarcodeReader.Read() retorna BarcodeResults, que é uma coleção de objetos BarcodeResult. Existem dois modos de falha que precisam de proteção: a própria coleção sendo nula (a entrada não foi reconhecida como uma imagem válida), e a coleção sendo vazia (imagem válida, mas nenhum código de barras encontrado). Acessar .First(), .Value ou iterar sem verificar ambas as condições resulta em uma exceção em tempo de execução.

O padrão de proteção padrão verifica ambas as condições antes de entrar no loop de processamento:

using IronBarCode;

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

// Null check: image may not be recognized
// Empty check: image recognized but no barcodes found
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;
}

foreach (BarcodeResult result in results)
{
    // Guard individual result properties
    if (string.IsNullOrWhiteSpace(result.Value))
    {
        Console.WriteLine($"Empty value detected for {result.BarcodeType}");
        continue;
    }

    Console.WriteLine($"Type: {result.BarcodeType}, Value: {result.Value}");
}
using IronBarCode;

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

// Null check: image may not be recognized
// Empty check: image recognized but no barcodes found
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;
}

foreach (BarcodeResult result in results)
{
    // Guard individual result properties
    if (string.IsNullOrWhiteSpace(result.Value))
    {
        Console.WriteLine($"Empty value detected for {result.BarcodeType}");
        continue;
    }

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

Cada BarcodeResult expõe .Value e .Text como propriedades de string — ambas retornam o conteúdo decodificado do código de barras. Na operação normal, estes são preenchidos, mas existem casos extremos: códigos de barras severamente danificados, digitalizações parciais ou detecções de baixa confiança podem produzir resultados onde o valor está vazio ou em branco. Verificar string.IsNullOrWhiteSpace() em resultados individuais detecta esses casos antes que os dados se propaguem.

A propriedade .Confidence (um double entre 0.0 e 1.0) fornece um sinal de qualidade adicional. Para sistemas de produção, podemos combinar a verificação de nulo com um limite de confiança:

double minimumConfidence = 0.7;

var validResults = results
    .Where(r => !string.IsNullOrWhiteSpace(r.Value) && r.Confidence >= minimumConfidence)
    .ToList();

if (validResults.Count == 0)
{
    Console.WriteLine("No barcodes met the confidence threshold.");
    return;
}
double minimumConfidence = 0.7;

var validResults = results
    .Where(r => !string.IsNullOrWhiteSpace(r.Value) && r.Confidence >= minimumConfidence)
    .ToList();

if (validResults.Count == 0)
{
    Console.WriteLine("No barcodes met the confidence threshold.");
    return;
}
$vbLabelText   $csharpLabel

A classe BarcodeReaderOptions também fornece uma propriedade MinimumConfidence que filtra no nível da varredura, em vez de pós-processamento. Definir isso no objeto de opções é mais limpo para cenários de digitalização em lote de alto rendimento.

Como Aplicar Padrões Seguros para Nulos na Escrita de Códigos de Barras?

BarcodeWriter.CreateBarcode() aceita um valor de string e um enum BarcodeWriterEncoding ou BarcodeEncoding. Passar uma string nula ou vazia lança uma exceção. Além disso, aplicam-se restrições específicas de formato — o EAN-8 requer exatamente de 7-8 dígitos numéricos, o UPC-A requer 11-12 dígitos, e o Code 128 tem um limite máximo de caracteres. Violar essas restrições também lança uma exceção.

O padrão defensivo valida as entradas antes de chamar CreateBarcode():

using IronBarCode;

string inputValue = GetValueFromUserOrDatabase(); // Could be null

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

// Guard: format-specific constraints (example: EAN-8 requires 7-8 digits)
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;
}

GeneratedBarcode barcode = BarcodeWriter.CreateBarcode(inputValue, encoding);
barcode.SaveAsPng("output-barcode.png");
using IronBarCode;

string inputValue = GetValueFromUserOrDatabase(); // Could be null

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

// Guard: format-specific constraints (example: EAN-8 requires 7-8 digits)
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;
}

GeneratedBarcode barcode = BarcodeWriter.CreateBarcode(inputValue, encoding);
barcode.SaveAsPng("output-barcode.png");
$vbLabelText   $csharpLabel

A API de escrita do IronBarcode executa sua própria validação interna — verifica checksums, verifica restrições de comprimento e rejeita caracteres inválidos para a codificação selecionada. Essas verificações lançam System.Exception com mensagens descritivas. As cláusulas de proteção acima capturam problemas antes que eles alcancem a biblioteca, o que nos dá controle sobre a mensagem de erro e o fluxo. Para uma lista completa de codificações suportadas e suas restrições, veja o como criar códigos de barras e o criar código de barras a partir de dados.

Como Validar Resultados Antes do Processamento Posterior?

Quando os dados de código de barras são usados em outro sistema — uma gravação de banco de dados, uma chamada de API, uma impressora de etiquetas — precisamos de um portão de validação que verifique a contagem dos resultados, a integridade do valor individual e o tipo de código de barras antes da transferência. Isso consolida a lógica de verificação de nulos em um único método reutilizável.

using IronBarCode;
using System.Collections.Generic;
using System.Linq;

public static class BarcodeValidator
{
    public static List<BarcodeResult> GetValidResults(
        string imagePath,
        BarcodeEncoding? expectedType = null,
        double minimumConfidence = 0.7)
    {
        BarcodeResults results = BarcodeReader.Read(imagePath);

        if (results is null || results.Count == 0)
            return new List<BarcodeResult>();

        return results
            .Where(r => !string.IsNullOrWhiteSpace(r.Value))
            .Where(r => r.Confidence >= minimumConfidence)
            .Where(r => expectedType == null || r.BarcodeType == expectedType)
            .ToList();
    }
}

// Usage
var validated = BarcodeValidator.GetValidResults(
    "warehouse-scan.png",
    expectedType: BarcodeEncoding.Code128,
    minimumConfidence: 0.85);

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

// Safe to pass to downstream systems
foreach (var barcode in validated)
{
    SendToInventorySystem(barcode.Value, barcode.BarcodeType.ToString());
}
using IronBarCode;
using System.Collections.Generic;
using System.Linq;

public static class BarcodeValidator
{
    public static List<BarcodeResult> GetValidResults(
        string imagePath,
        BarcodeEncoding? expectedType = null,
        double minimumConfidence = 0.7)
    {
        BarcodeResults results = BarcodeReader.Read(imagePath);

        if (results is null || results.Count == 0)
            return new List<BarcodeResult>();

        return results
            .Where(r => !string.IsNullOrWhiteSpace(r.Value))
            .Where(r => r.Confidence >= minimumConfidence)
            .Where(r => expectedType == null || r.BarcodeType == expectedType)
            .ToList();
    }
}

// Usage
var validated = BarcodeValidator.GetValidResults(
    "warehouse-scan.png",
    expectedType: BarcodeEncoding.Code128,
    minimumConfidence: 0.85);

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

// Safe to pass to downstream systems
foreach (var barcode in validated)
{
    SendToInventorySystem(barcode.Value, barcode.BarcodeType.ToString());
}
$vbLabelText   $csharpLabel

O método validador retorna uma lista vazia em vez de nula — isso elimina a necessidade de os chamadores verificarem nulos no valor de retorno, que é um padrão defensivo padrão. O parâmetro opcional expectedType garante que o sistema a jusante receba apenas o formato de código de barras que espera, o que evita incompatibilidades quando uma varredura capta tanto um QR code quanto um Code 128 da mesma imagem.

Para leitura em lote de vários arquivos, aplique o mesmo padrão por arquivo e agregue resultados. A classe BarcodeReaderOptions suporta ExpectBarcodeTypes para filtrar no nível da varredura, o que reduz o ruído antes da validação.

Próximos passos

A verificação de nulos para operações do IronBarcode resume-se a dois padrões: proteja a coleção BarcodeResults (nula + vazia) antes de ler propriedades e valide strings de entrada antes de escrever. O validador reutilizável acima centraliza ambas as preocupações.

Para uma cobertura mais aprofundada, explore o tutorial de leitura de códigos de barras para configuração de varredura, o guia de formatos de dados de saída para todas as propriedades BarcodeResult e a referência de API para a superfície completa de tipos.

Inicie um teste gratuito de 30 dias para testar esses padrões contra dados reais de escaneamento. Quando estiver pronto, veja as opções de licenciamento a partir de $499.

Perguntas frequentes

O que é checagem de nulo em operações de código de barras?

A verificação de nulo em operações de código de barras envolve verificar se um resultado ou entrada de código de barras é nulo para prevenir erros de execução e garantir um processamento de código de barras suave.

Por que a verificação de nulo é importante em operações de código de barras em C#?

A verificação de nulo é crucial em operações de código de barras em C# para evitar exceções e garantir que o aplicativo possa lidar graciosamente com casos em que os dados de código de barras possam estar ausentes ou inválidos.

Como o IronBarcode pode ajudar com a verificação de nulo?

O IronBarcode fornece métodos embutidos para lidar facilmente com verificações de nulo, permitindo que os desenvolvedores gerenciem com segurança os dados de código de barras sem implementar manualmente lógica complexa de validação.

Quais são algumas das melhores práticas para verificação de nulo no IronBarcode?

As melhores práticas incluem verificar valores nulos em BarcodeResults, validar entradas antes do processamento e usar filtros de confiança para garantir resultados confiáveis de leitura de códigos de barras.

O IronBarcode pode filtrar resultados por confiança para evitar saídas nulas?

Sim, o IronBarcode permite filtrar resultados de código de barras por níveis de confiança, o que ajuda a reduzir saídas nulas e garante alta precisão na leitura de códigos de barras.

Existe uma maneira de validar entradas de escrita usando IronBarcode?

O IronBarcode permite a validação de entradas de escrita para garantir que os dados sendo codificados nos códigos de barras estejam corretos e completos, prevenindo problemas durante a geração de código de barras.

O que acontece se um resultado nulo de código de barras não for tratado?

Se um resultado nulo de código de barras não for tratado, ele pode levar a exceções de execução e interromper o fluxo do aplicativo, causando possíveis falhas ou operações incorretas.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais
Pronto para começar?
Nuget Downloads 2,108,094 | Versão: 2026.3 acaba de ser lançado
Still Scrolling Icon

Ainda está rolando a tela?

Quer provas rápidas? PM > Install-Package BarCode
executar um exemplo Veja seu fio se transformar em um código de barras.