Comment gérer la vérification des valeurs nulles pour les opérations de code-barres en C

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

IronBarcode renvoie les résultats de numérisation sous forme de collection BarcodeResults en C# jusqu'à BarcodeReader.Read. Cette méthode renvoie null si l'image d'entrée n'est pas reconnue, ou une collection vide si aucun code-barres n'est détecté. BarcodeWriter.CreateBarcode Lève une exception si l'entrée est nulle, vide ou dans un format invalide.

Les sources de numérisation réelles telles que les flux vidéo de caméras, les téléchargements de documents et les scanners d'entrepôt ne fournissent pas toujours un code-barres lisible. L'accès aux propriétés de résultat ou l'itération sur la collection sans vérification des valeurs nulles ou vides peut provoquer une erreur NullReferenceException à l'exécution. La transmission de chaînes invalides à l'API d'écriture peut entraîner une exception ArgumentException. L'utilisation de clauses de garde dans les opérations de lecture et d'écriture permet d'éviter ces exceptions en production.

Ce guide explique comment gérer les résultats nuls et vides dans les opérations de lecture et d'écriture IronBarcode en utilisant des clauses de garde, un filtrage de confiance et un modèle de validateur réutilisable.


Démarrage rapide : gérer les résultats nuls dans les opérations de code-barres

Utilisez le modèle de garde d'IronBarcode pour vérifier en toute sécurité la collection BarcodeResults avant d'accéder aux propriétés de résultat. Commencez immédiatement par cette lecture et cette vérification minimales :

  1. Installez IronBarcode avec le Gestionnaire de Packages NuGet

    PM > Install-Package BarCode
  2. Copiez et exécutez cet extrait de code.

    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. Déployez pour tester sur votre environnement de production.

    Commencez à utiliser IronBarcode dans votre projet dès aujourd'hui avec un essai gratuit

    arrow pointer

Comment gérer les résultats de codes-barres nuls et vides ?

Il existe deux modes d'échec : BarcodeResults est nul si l'entrée n'est pas une image valide, et vide si l'image ne contient aucun code-barres. L'accès à First, Value, ou l'itération sans vérifier les deux conditions provoquera une exception d'exécution.

Vérifiez les deux conditions avant d'entrer dans la boucle de traitement :

Entrée

Une étiquette d'expédition avec code-barres Code128 (chemin de réussite) et une image vierge ne contenant aucun code-barres (chemin d'échec).

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

étiquette-d'expédition.png (chemin de réussite)

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

blank-image.png (chemin d'échec, aucun code-barres présent)

: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

Chaque BarcodeResult fournit des propriétés de chaîne Value et Text, renvoyant toutes deux le contenu du code-barres décodé. Les codes-barres gravement endommagés ou les numérisations partielles peuvent produire des valeurs vides ou des espaces blancs. Utilisez string.IsNullOrWhiteSpace sur chaque résultat pour empêcher les valeurs vides d'atteindre les systèmes en aval.

BarcodeReaderOptions possède également une propriété ConfidenceThreshold (0,0 à 1,0) qui supprime les lectures de faible qualité avant qu'elles n'atteignent la collection de résultats :

: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

Comment appliquer des modèles sécurisés contre les nulles à l'écriture de code-barres ?

BarcodeWriter.CreateBarcode prend une valeur de chaîne et une énumération BarcodeWriterEncoding ou BarcodeEncoding. Le passage d'une chaîne nulle ou vide provoque immédiatement une exception. Des contraintes de format s'appliquent également : EAN-8 accepte de 7 à 8 chiffres numériques, UPC-A en accepte de 11 à 12 et le Code 128 a une limite de caractères. La validation des données d'entrée avant l'appel permet d'éviter que ces exceptions ne surviennent lors de l'étape d'encodage :

: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

Sortie

Une entrée valide à 7 chiffres (1234567) produit un code-barres EAN-8 scannable. Les entrées nulles, vides ou non numériques sont interceptées par les clauses de garde et n'atteignent jamais l'étape d'encodage.

Code-barres EAN-8 généré à partir des 7 chiffres valides saisis : 1234567

L'API d'écriture effectue également sa propre validation interne : elle vérifie les sommes de contrôle, les contraintes de longueur et rejette les caractères invalides pour l'encodage sélectionné. Les clauses de garde ci-dessus permettent de détecter les problèmes plus tôt, donnant ainsi à l'appelant le contrôle sur le message d'erreur et le chemin de récupération. Pour une liste complète des encodages supportés et de leurs contraintes, voir le guide de création de code-barres et le guide de création de code-barres à partir des données.


Comment valider les résultats avant le traitement en aval ?

Lorsque des données de codes-barres sont transmises à un autre système (écriture dans une base de données, appel d'API, imprimante d'étiquettes), il est utile de regrouper le nombre de résultats, l'intégrité des valeurs et les contrôles de type dans une seule méthode réutilisable avant de transmettre les données :

Entrée

Un scan de code-barres Code128 en entrepôt utilisé comme cible de lecture pour le validateur.

L'encodage du code-barres Code128 WH-SCAN-4471 est utilisé comme entrée de scan d'entrepôt pour l'exemple de validateur.
: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

La méthode renvoie une liste vide plutôt que null, les appelants n'ont donc jamais besoin de vérifier si la valeur de retour est nulle. Le paramètre optionnel expectedType filtre par symbologie, ce qui empêche le système en aval de recevoir des formats inattendus lorsqu'une analyse détecte à la fois un code QR et un Code 128 à partir de la même image.

Pour la lecture par lots de plusieurs fichiers, appliquez le même modèle à chaque fichier et agrégez les résultats. L'option ExpectBarcodeTypes sur BarcodeReaderOptions restreint l'analyse aux symbologies attendues en amont, de sorte que moins de résultats indésirables atteignent le validateur.


Lecture supplémentaire

Consultez les options de licence lorsque le pipeline sera prêt pour la production.

Questions Fréquemment Posées

Qu'est-ce que la vérification des nulls dans les opérations de code-barres ?

La vérification des nulls dans les opérations de code-barres consiste à vérifier si un résultat ou une entrée de code-barres est nul pour éviter les erreurs à l'exécution et garantir un traitement fluide des codes-barres.

Pourquoi la vérification des nulls est-elle importante dans les opérations de codes-barres en C# ?

La vérification des nulls est cruciale dans les opérations de codes-barres en C# pour éviter les exceptions et garantir que l'application peut gérer avec grâce les cas où les données de codes-barres peuvent être manquantes ou invalides.

Comment IronBarcode peut-il aider avec la vérification des nulls ?

IronBarcode fournit des méthodes intégrées pour gérer facilement les vérifications de nulls, permettant aux développeurs de gérer en toute sécurité les données de codes-barres sans implémenter manuellement des logiques de validation complexes.

Quelles sont les meilleures pratiques pour la vérification des nulls dans IronBarcode ?

Les meilleures pratiques incluent la vérification des valeurs nulles dans les BarcodeResults, la validation des entrées avant traitement, et l'utilisation de filtres de confiance pour garantir des résultats de balayage de codes-barres fiables.

IronBarcode peut-il filtrer les résultats par confiance pour éviter les résultats nuls ?

Oui, IronBarcode permet de filtrer les résultats de codes-barres par niveaux de confiance, ce qui aide à réduire les résultats nuls et garantit une grande précision dans la lecture des codes-barres.

Existe-t-il un moyen de valider les entrées d'écriture en utilisant IronBarcode ?

IronBarcode permet la validation des entrées d'écriture pour s'assurer que les données encodées dans les codes-barres sont correctes et complètes, évitant des problèmes lors de la génération de codes-barres.

Que se passe-t-il si un résultat de code-barres nul n'est pas traité ?

Si un résultat de code-barres nul n'est pas traité, cela peut entraîner des exceptions à l'exécution et perturber le flux de l'application, causant potentiellement des plantages ou des opérations incorrectes.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite
Prêt à commencer?
Nuget Téléchargements 2,121,847 | Version : 2026.3 vient de sortir
Still Scrolling Icon

Vous faites encore défiler ?

Vous voulez une preuve rapidement ? PM > Install-Package BarCode
exécuter un échantillon regarder votre chaîne devenir un code-barres.