Wie man Nullprüfungen für Barcode-Operationen in C# handhabt

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

IronBarcode gibt Scan-Ergebnisse als BarcodeResults Sammlung in C# bis BarcodeReader.Read zurück. Diese Methode gibt null zurück, wenn das Eingabebild nicht erkannt wird, oder eine leere Sammlung, wenn keine Barcodes erkannt werden. BarcodeWriter.CreateBarcode löst eine Ausnahme aus, wenn die Eingabe null, leer oder in einem ungültigen Format ist.

Scanquellen aus der Praxis, wie z. B. Kamerabilder, Dokumenten-Uploads und Lagerscanner, liefern möglicherweise nicht immer einen lesbaren Barcode. Der Zugriff auf Ergebniseigenschaften oder das Durchlaufen der Auflistung ohne Prüfung auf Null- oder leere Werte kann zur Laufzeit einen NullReferenceException-Fehler verursachen. Die Übergabe ungültiger Zeichenketten an die Schreib-API kann eine ArgumentException auslösen. Die Verwendung von Schutzklauseln sowohl bei Lese- als auch bei Schreibvorgängen hilft, diese Ausnahmen im Produktivbetrieb zu vermeiden.

Diese Anleitung erklärt, wie man Null- und leere Ergebnisse bei IronBarcode -Lese- und Schreibvorgängen mithilfe von Guard-Klauseln, Konfidenzfiltern und einem wiederverwendbaren Validierungsmuster behandelt.


Schnellstart: Umgang mit Null-Ergebnissen bei Barcode-Operationen

Verwenden Sie das Guard-Pattern von IronBarcode, um die Sammlung BarcodeResults sicher zu überprüfen, bevor Sie auf Ergebniseigenschaften zugreifen. Legen Sie sofort los mit dieser kurzen Lektüre und Überprüfung:

  1. Installieren Sie IronBarcode mit NuGet Package Manager

    PM > Install-Package BarCode
  2. Kopieren Sie diesen Codeausschnitt und führen Sie ihn aus.

    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. Bereitstellen zum Testen in Ihrer Live-Umgebung

    Beginnen Sie noch heute, IronBarcode in Ihrem Projekt zu verwenden, mit einer kostenlosen Testversion

    arrow pointer

Wie geht man mit Null- und leeren Barcode-Ergebnissen um?

Es gibt zwei Fehlermodi: BarcodeResults ist null, wenn die Eingabe kein gültiges Bild ist, und leer, wenn das Bild keine Barcodes enthält. Der Zugriff auf First, Value oder das Durchlaufen der Liste ohne vorherige Überprüfung beider Bedingungen führt zu einer Laufzeitausnahme.

Prüfen Sie beide Bedingungen, bevor Sie in die Verarbeitungsschleife eintreten:

Eingabe

Ein Versandetikett mit Code128-Barcode (Erfolgsfall) und ein leeres Bild ohne Barcode (Fehlerfall).

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

shipping-label.png (Erfolgspfad)

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

blank-image.png (Fehlerpfad, kein Barcode vorhanden)

: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

Jeder BarcodeResult stellt die String-Eigenschaften Value und Text bereit, die beide den dekodierten Barcode-Inhalt zurückgeben. Stark beschädigte Barcodes oder unvollständige Scans können zu leeren oder weißen Werten führen. Verwenden Sie string.IsNullOrWhiteSpace für jedes Ergebnis, um zu verhindern, dass leere Werte nachgelagerte Systeme erreichen.

BarcodeReaderOptions verfügt außerdem über eine ConfidenceThreshold Eigenschaft (0,0 bis 1,0), die minderwertige Lesevorgänge verwirft, bevor sie die Ergebnissammlung erreichen:

: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

Wie wendet man Null-sichere Muster beim Barcode-Schreiben an?

BarcodeWriter.CreateBarcode nimmt einen String-Wert und einen BarcodeWriterEncoding oder BarcodeEncoding Enum-Wert entgegen. Das Übergeben eines Nullwerts oder einer leeren Zeichenkette führt sofort zu einer Ausnahme. Es gelten auch Formatbeschränkungen: EAN-8 akzeptiert 7 bis 8 Ziffern, UPC-A akzeptiert 11 bis 12 und Code 128 hat eine Zeichenbegrenzung. Durch die Validierung der Eingabe vor dem Aufruf werden diese Ausnahmen vom Kodierungsschritt ferngehalten:

: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

Ausgabe

Eine gültige 7-stellige Eingabe (1234567) erzeugt einen scannbaren EAN-8-Barcode. Nullwerte, leere oder nicht-numerische Eingaben werden von den Schutzklauseln abgefangen und erreichen niemals den Kodierungsschritt.

EAN-8-Barcode, generiert aus der gültigen 7-stelligen Eingabe 1234567

Die Schreib-API führt auch eine eigene interne Validierung durch: Sie prüft Prüfsummen, verifiziert Längenbeschränkungen und weist ungültige Zeichen für die ausgewählte Kodierung zurück. Die oben genannten Schutzklauseln fangen Probleme früher ab und geben dem Aufrufer die Kontrolle über die Fehlermeldung und den Wiederherstellungspfad. Eine vollständige Liste der unterstützten Kodierungen und ihrer Einschränkungen finden Sie in der Anleitung zur Barcode-Erstellung und im Leitfaden zum Erstellen von Barcodes aus Daten .


Wie lassen sich Ergebnisse vor der Weiterverarbeitung validieren?

Wenn Barcode-Daten in ein anderes System eingespeist werden (z. B. Datenbankeinträge, API-Aufrufe, Etikettendrucker), ist es hilfreich, die Ergebnisanzahl, die Datenintegrität und die Typüberprüfungen in einer einzigen wiederverwendbaren Methode zusammenzufassen, bevor die Daten weitergegeben werden:

Eingabe

Ein Code128-Barcode-Lagerscan, der als Leseziel für den Validator verwendet wird.

Code128-Barcode-Codierung WH-SCAN-4471 wird als Eingabe für den Lagerscan im Validierungsbeispiel verwendet.
: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

Die Methode gibt eine leere Liste anstelle von null zurück, sodass Aufrufer den Rückgabewert nie auf null prüfen müssen. Der optionale Parameter expectedType filtert nach Symbologie, wodurch verhindert wird, dass das nachgelagerte System unerwartete Formate empfängt, wenn ein Scan sowohl einen QR-Code als auch einen Code 128 aus demselben Bild erfasst.

Beim Stapellesen mehrerer Dateien wird für jede Datei dasselbe Muster angewendet und die Ergebnisse werden anschließend aggregiert. Die Option ExpectBarcodeTypes auf BarcodeReaderOptions beschränkt den Scan von vornherein auf erwartete Symbologien, sodass weniger unerwünschte Ergebnisse den Validator erreichen.


Weiterführende Literatur

Die Lizenzierungsoptionen können Sie einsehen , sobald die Pipeline produktionsbereit ist.

Häufig gestellte Fragen

Was ist Null-Prüfung in Barcode-Operationen?

Null-Prüfung in Barcode-Operationen bedeutet zu überprüfen, ob ein Barcode-Ergebnis oder eine Eingabe null ist, um Laufzeitfehler zu vermeiden und eine reibungslose Barcode-Verarbeitung sicherzustellen.

Warum ist die Null-Prüfung in C# Barcode-Operationen wichtig?

Null-Prüfung ist entscheidend in C# Barcode-Operationen, um Ausnahmen zu vermeiden und sicherzustellen, dass die Anwendung Fälle, in denen Barcode-Daten fehlen oder ungültig sind, elegant verarbeiten kann.

Wie kann IronBarcode bei der Nullprüfung helfen?

IronBarcode bietet eingebaute Methoden zur einfachen Handhabung von Nullprüfungen und ermöglicht Entwicklern, Barcode-Daten sicher zu verwalten, ohne komplexe Validierungslogik manuell implementieren zu müssen.

Was sind einige Best Practices für Nullprüfungen in IronBarcode?

Best Practices umfassen das Überprüfen von BarcodeResults auf Nullwerte, das Validieren der Eingaben vor der Verarbeitung und das Verwenden von Vertrauensfiltern, um zuverlässige Barcode-Scan-Ergebnisse sicherzustellen.

Kann IronBarcode Ergebnisse nach Vertrauen filtern, um Null-Ausgaben zu vermeiden?

Ja, IronBarcode ermöglicht das Filtern von Barcode-Ergebnissen nach Vertrauensniveaus, was hilft Null-Ausgaben zu reduzieren und hohe Genauigkeit beim Barcode-Lesen zu gewährleisten.

Gibt es eine Möglichkeit, Schreib-Eingaben mit IronBarcode zu validieren?

IronBarcode ermöglicht die Validierung von Schreib-Eingaben, um sicherzustellen, dass die Daten, die in Barcode kodiert werden, korrekt und vollständig sind, was Probleme bei der Barcode-Erstellung verhindert.

Was passiert, wenn ein Null-Barcode-Ergebnis nicht behandelt wird?

Wenn ein Null-Barcode-Ergebnis nicht behandelt wird, kann dies zu Laufzeitausnahmen führen und den Ablauf der Anwendung stören, was potenziell zu Abstürzen oder fehlerhaften Operationen führen kann.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen
Bereit anzufangen?
Nuget Downloads 2,121,847 | Version: 2026.3 gerade veröffentlicht
Still Scrolling Icon

Scrollst du immer noch?

Sie brauchen schnell einen Beweis? PM > Install-Package BarCode
Führen Sie ein Beispiel aus und beobachten Sie, wie Ihre Zeichenkette zu einem BarCode wird.