IRONSOFTWAREHOME

Jak obsługiwac sprawdzanie null w operacjach z kodami kreskowymi w C#

Curtis Chau
Curtis Chau
Updated: 9 maja 2026

IronBarcode zwraca wyniki skanowania jako kolekcję BarcodeResults w C# poprzez BarcodeReader.Read. Ta metoda zwraca null, jeśli obraz wejściowy nie jest rozpoznawany, lub pustą kolekcję, jeśli nie wykryto kodów kreskowych. BarcodeWriter.CreateBarcode zgłasza wyjątek, jeśli wejście jest nullem, puste lub w nieprawidłowym formacie.

Zrodla skanowania w rzeczywistych sytuacjach, takie jak sygnaly z kamer, przesyłanie dokumentów i skanery magazynowe, mogą nie zawsze dostarczać czytelny kod kreskowy. Dostęp do właściwości wynikowych lub iterowanie kolekcji bez sprawdzenia wartości null lub pustych wartości może spowodować NullReferenceException w czasie wykonywania. Przekazywanie nieprawidłowych ciągów znaków do API pisania może skutkować ArgumentException. użycie strażników w operacjach odczytu i zapisu pomaga zapobiegać tym wyjątkom w produkcji.

Ten przewodnik wyjaśnia, jak obsłużyć puste i null wyniki w operacjach odczytu i zapisu IronBarcode, używając strażników, filtrowania według pewności i wzorca walidatora wielokrotnego użytku.


Podstawy: Obsluguj puste wyniki w operacjach z kodami kreskowymi

Użyj wzorca ochronnego IronBarcode, aby bezpiecznie sprawdzić kolekcję BarcodeResults przed dostępem do jakichkolwiek właściwości wynikowych. Zacznij od razu od tego minimalnego odczytu i sprawdzenia:

  1. 1Install IronBarcode with NuGet Package Manager

    PM > Install-Package BarCode

  2. 2Skopiuj i uruchom ten fragment kodu.

    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);
    C#
  3. 3Wdrożenie do testowania w środowisku produkcyjnym

    Rozpocznij używanie IronBarcode w swoim projekcie już dziś z darmową wersją próbną
    arrow pointer

Jak obsługiwac puste wyniki z kodami kreskowymi?

Istnieją dwa tryby awarii: BarcodeResults jest nullem, jeśli wejście nie jest prawidłowym obrazem, i puste, jeśli obraz nie zawiera kodów kreskowych. Dostęp do First, Value lub iteracja bez weryfikacji obu warunków spowoduje wyjątek w czasie wykonywania.

Sprawdź oba warunki przed rozpoczęciem pętli przetwarzania:

Dane wejściowe

Kod kreskowy etykiety wysyłkowej Code128 (ścieżka sukcesu) i pusty obraz nie zawierający kodu kreskowego (ścieżka awarii).

Kod kreskowy Code128 kodujący SHP-20240001 użyty jako dane wejściowe etykiety wysyłkowej

shipping-label.png (ścieżka success)

Pusty biały obraz bez kodu kreskowego użyty do wywołania ścieżki pustego wyniku

blank-image.png (ścieżka failure, brak kodu kreskowego)

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}");
}

Każdy BarcodeResult dostarcza właściwości ciągów Value i Text, zwracając treść zakodowaną kodem kreskowym. Znacznie uszkodzone kody kreskowe lub częściowe skany mogą generować puste lub białe wartości. Użyj string.IsNullOrWhiteSpace na każdym wyniku, aby zapobiec przekazywaniu pustych wartości do systemów docelowych.

BarcodeReaderOptions ma również właściwość ConfidenceThreshold (od 0,0 do 1,0), która odrzuca odczyty niskiej jakości, zanim dotrą do kolekcji wyników:

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}");

Jak zastosować wzorce zabezpieczone przed null w pisaniu kodow kreskowych?

BarcodeWriter.CreateBarcode przyjmuje wartość tekstową i BarcodeWriterEncoding lub wyliczenia BarcodeEncoding. Przekazanie null lub pustego ciągu znaków natychmiast rzuca wyjątek. Również obowiązują ograniczenia formatu: EAN-8 akceptuje od 7 do 8 cyfr, UPC-A akceptuje od 11 do 12, a Code 128 ma limit znaków. Walidacja wejścia przed wywołaniem utrzymuje te wyjątki poza krokiem kodowania:

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");

Wynik

Prawidłowe 7-cyfrowe wejście (1234567) generuje możliwy do zeskanowania kod kreskowy EAN-8. Wejścia null, puste lub nienumeryczne są wychwytywane przez strażników i nigdy nie docierają do kroku kodowania.

Kod kreskowy EAN-8 wygenerowany z poprawnego wejścia 7-cyfrowego 1234567

API pisania także wykonuje swoją własną, wewnętrzną walidację: sprawdza sumy kontrolne, weryfikuje ograniczenia długości i odrzuca nieprawidłowe znaki dla wybranego kodowania. Powyższe strażnicy łapią problemy wcześniej, dając dzwoniącemu kontrolę nad komunikatem o błędzie i ścieżką odzyskiwania. Dla pełnej listy obsługiwanych kodowań i ich ograniczeń, zobacz jak tworzyć kody kreskowe i przewodnik o tworzeniu kodów kreskowych z danych.


Jak zweryfikowac wyniki przed przetwarzaniem downstream?

Gdy dane kodu kreskowego są przekazywane do innego systemu (zapis bazy danych, wywołanie API, drukarka etykiet), warto skonsolidowac liczbę wyników, integralność wartości i sprawdzenie typu w jedną metodę do ponownego użycia przed przekazaniem danych dalej:

Dane wejściowe

Skanowanie magazynowe kodu kreskowego Code128 użyte jako cel odczytu dla validatora.

Kodowanie kodu kreskowego Code128 WH-SCAN-4471 używane jako wejście skanu magazynowego w przykładzie walidatora
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
}

Metoda zwraca pustą listę zamiast null, więc dzwoniący nie musi sprawdzać null dla wartości zwracanej. Opcjonalny parametr expectedType filtruje według symboliki, co zapobiega otrzymywaniu przez system docelowy nieoczekiwanych formatów, gdy skan wychwytuje zarówno kod QR, jak i Code 128 z tego samego obrazu.

Dla odczytów zbiorczych przez wiele plików, zastosuj ten sam wzorzec na plik i zbierz wyniki. Opcja ExpectBarcodeTypes na BarcodeReaderOptions zawęża skanowanie do oczekiwanych symbolik z góry, więc mniej niechcianych wyników dociera do validatora.


Więcej informacji

Zapoznaj się z opcjami licencyjnymi, gdy potok będzie gotowy do produkcji.

Często Zadawane Pytania

Czym jest sprawdzanie na null w operacjach z kodami kreskowymi?

Sprawdzanie na null w operacjach z kodami kreskowymi polega na weryfikacji, czy wynik lub dane wejściowe są nullem, aby zapobiec błędom w czasie wykonywania i zapewnić płynne przetwarzanie kodów kreskowych.

Dlaczego sprawdzanie na null jest ważne w operacjach z kodami kreskowymi w C#?

Sprawdzanie na null jest kluczowe w operacjach z kodami kreskowymi w C# dla unikania wyjątków i zapewnienia, że aplikacja może sprawnie obsługiwać przypadki, gdy dane kodów kreskowych mogą być brakujące lub nieprawidłowe.

Jak IronBarcode może pomóc w sprawdzaniu na null?

IronBarcode oferuje wbudowane metody do łatwego obsługiwania wartości null, umożliwiając programistom bezpieczne zarządzanie danymi kodu kreskowego bez potrzeby ręcznego implementowania skomplikowanej logiki walidacji.

Jakie są najlepsze praktyki dla sprawdzania na null w IronBarcode?

Najlepsze praktyki obejmują sprawdzanie wartości null w BarcodeResults, walidację danych wejściowych przed przetwarzaniem i używanie filtrów zaufania w celu zapewnienia wiarygodnych wyników skanowania kodów kreskowych.

Czy IronBarcode może filtrować wyniki według zaufania, aby uniknąć wyników null?

Tak, IronBarcode pozwala na filtrowanie wyników kodów kreskowych według poziomów zaufania, co pomaga zmniejszyć ilość wyników null i zapewni wysoką dokładność odczytu kodów kreskowych.

Czy istnieje sposób na walidację danych wejściowych do zapisu przy użyciu IronBarcode?

IronBarcode umożliwia walidację danych wejściowych do zapisu, aby upewnić się, że dane kodowane w kody kreskowe są prawidłowe i kompletne, zapobiegając problemom podczas generowania kodów kreskowych.

Co się dzieje, jeśli wynik kodu kreskowego na null nie jest obsługiwany?

Jeśli wynik kodu kreskowego na null nie jest obsługiwany, może to prowadzić do wyjątków w czasie wykonania i zaburzyć przepływ aplikacji, powodując potencjalne awarie lub nieprawidłowe operacje.

How does IronBarcode's reusable validator pattern work?

IronBarcode's reusable validator pattern consolidates null checks, empty checks, value integrity, and expected format validation into a single method, simplifying the validation process before results are used downstream.

What are some constraints that BarcodeWriterEncoding handles during barcode creation?

BarcodeWriterEncoding imposes constraints like string length and character validity based on the barcode type. For example, EAN-8 must have 7 or 8 numeric digits. Correctly formatted input avoids exceptions during encoding.

How does IronBarcode ensure the quality of scanned barcodes?

IronBarcode uses properties such as ConfidenceThreshold in BarcodeReaderOptions to ensure only high-quality barcodes are included in results. This pre-scanning filter means low-quality reads are discarded before further processing.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podręczników.

...
Czytaj więcej

Gotowy, aby rozpocząć?

Nuget Downloads 2,422,100Wersja:2026.9właśnie wydany

Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta
Biblioteka C# NuGet dla plików PDF
Zainstaluj za pomocą NuGet

Wersja: 2026.9

PM > Install-Package BarCode
nuget.org/packages/BarCode/
  1. W Eksploratorze Rozwiązań, kliknij prawym przyciskiem Myszy na Odwołania, Zarządzaj pakietami NuGet
  2. Wybierz Przeglądaj i wyszukaj "IronBarCode"
  3. Wybierz pakiet i zainstaluj
DLL PDF dla C#
Pobierz DLL

Wersja: 2026.9

  1. Pobierz i rozpakuj IronBarCode do lokalizacji, takiej jak ~/Libs w katalogu Twojego rozwiązania
  2. W Eksploratorze Rozwiązań Visual Studio kliknij prawym przyciskiem Referencje. Wybierz Przeglądaj, "IronBarCode.dll"

Licencje od $999

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Your trial license will be sent to your email address

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta