Comment gérer la vérification des valeurs nulles pour les opérations de code-barres en C
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 :
-
Installez IronBarcode avec le Gestionnaire de Packages NuGet
PM > Install-Package BarCode -
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); -
Déployez pour tester sur votre environnement de production.
Commencez à utiliser IronBarcode dans votre projet dès aujourd'hui avec un essai gratuit
Comment gérer la vérification des valeurs nulles pour les opérations sur les codes-barres avec IronBarcode
- Téléchargez la bibliothèque IronBarcode depuis NuGet
- Appelez
BarcodeReader.Readet capturez la valeur de retourBarcodeResults - Vérifiez si la valeur est nulle avant d'accéder à un résultat.
- Validez les propriétés individuelles
BarcodeResultavant leur utilisation ultérieure. - Définissez
ConfidenceThresholddansBarcodeReaderOptionspour filtrer les lectures de faible qualité au niveau de la numérisation.
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).
étiquette-d'expédition.png (chemin de réussite)
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}");
}
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
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}");
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
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");
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")
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.
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.
: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
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
- Tutoriel sur la lecture des codes-barres : configuration de la numérisation et options de lecture.
- Guide des formats de données de sortie : toutes les propriétés
BarcodeResultet leurs types. - Créer un code-barres à partir des données : contraintes d'encodage pour chaque symbologie.
- Référence de l'API BarcodeReaderOptions : documentation de configuration complète.
- Journal des modifications IronBarcode : corrections spécifiques à la version et ajouts de fonctionnalités.
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.

