C#에서 바코드 작업을 위한 널 체크 처리 방법
IronBarcode는 C#에서 BarcodeReader.Read을 통해 BarcodeResults 컬렉션으로 스캔 결과를 반환합니다. 이 메서드는 입력 이미지를 인식할 수 없는 경우 null을 반환하고, 바코드가 감지되지 않은 경우 빈 컬렉션을 반환합니다. 입력이 null, 비어 있거나 잘못된 형식인 경우 BarcodeWriter.CreateBarcode는 예외를 던집니다.
카메라 영상, 문서 업로드, 창고 스캐너와 같은 실제 스캔 소스는 항상 판독 가능한 바코드를 제공하지 않을 수 있습니다. 결과 속성에 액세스하거나 컬렉션을 반복할 때 null 또는 빈 값을 확인하지 않으면 런타임 시 NullReferenceException가 발생할 수 있습니다. 잘못된 문자열을 쓰기 API로 전달하면 ArgumentException가 발생할 수 있습니다. 읽기 및 쓰기 작업 모두에서 가드 절을 사용하면 실제 운영 환경에서 이러한 예외를 방지하는 데 도움이 됩니다.
이 방법은 IronBarcode 읽기 및 쓰기 작업에서 null과 빈 결과를 처리하는 방법을 가드 절, 신뢰도 필터링 및 재사용 가능한 유효성 검사자 패턴을 사용하여 설명합니다.
빠른 시작: 바코드 작업에서 널 결과 처리
IronBarcode의 보호 패턴을 사용하여 BarcodeResults 컬렉션을 안전하게 확인한 후에 결과 속성에 액세스하세요. 지금 바로 이 간단한 읽기 및 확인 절차를 시작해 보세요.
-
NuGet 패키지 관리자를 사용하여 https://www.nuget.org/packages/BarCode 설치하기
-
다음 코드 조각을 복사하여 실행하세요.
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); -
실제 운영 환경에서 테스트할 수 있도록 배포하세요.
무료 체험판으로 오늘 프로젝트에서 IronBarcode 사용 시작하기
IronBarcode 사용한 바코드 작업에서 null 값 검사를 처리하는 방법
- NuGet에서 IronBarcode 라이브러리 다운로드
BarcodeReader.Read호출하고BarcodeResults반환 값을 캡처합니다.- 결과에 접근하기 전에 null인지 확인하십시오.
- 후속 사용 전에
BarcodeResult개별 속성을 검증하십시오. - 스캔 단계에서 품질이 낮은 판독값을 필터링하려면
BarcodeReaderOptions에서ConfidenceThreshold설정하십시오.
널 및 빈 바코드 결과를 처리하는 방법?
오류 모드는 두 가지입니다: 입력이 유효하지 않은 이미지인 경우 BarcodeResults는 null이고, 이미지에 바코드가 포함되어 있지 않으면 비어 있습니다. 두 조건을 모두 확인하지 않고 First, Value에 액세스하거나 반복하면 런타임 예외가 발생합니다.
처리 루프에 들어가기 전에 두 가지 조건을 모두 확인하십시오.
입력
하나는 Code128 바코드 배송 라벨(성공 경로)이고, 다른 하나는 바코드를 포함하지 않는 빈 이미지(실패 경로)입니다.
shipping-label.png (성공 경로)
blank-image.png (오류 경로, 바코드 없음)
: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
각 BarcodeResult는 Value 및 Text 문자열 속성을 제공하며, 둘 다 디코딩된 바코드 콘텐츠를 반환합니다. 바코드가 심하게 손상되었거나 스캔이 부분적으로만 이루어진 경우, 값이 비어 있거나 공백으로 표시될 수 있습니다. 각 결과에서 빈 값이 하류 시스템에 도달하지 않도록 string.IsNullOrWhiteSpace을 사용하세요.
BarcodeReaderOptions에도 (0.0에서 1.0까지의) ConfidenceThreshold 속성이 있으며, 결과 컬렉션에 도달하기 전에 저품질 판독값을 제거합니다:
: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
바코드 쓰기에 널 안전 패턴을 적용하는 방법?
BarcodeWriter.CreateBarcode은 문자열 값과 BarcodeWriterEncoding 또는 BarcodeEncoding 열거형을 수용합니다. null 또는 빈 문자열을 전달하면 즉시 예외가 발생합니다. 형식 제약도 적용: EAN-8는 7~8자리의 숫자만을 수용하고, UPC-A는 11~12자리를, 그리고 Code 128는 문자 제한을 가지고 있습니다. 함수 호출 전에 입력값을 검증하면 이러한 예외가 인코딩 단계에 포함되지 않습니다.
: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")
산출
유효한 7자리 입력(1234567)은 스캔 가능한 EAN-8 바코드를 생성합니다. null, 빈 값 또는 숫자가 아닌 입력은 가드 절에 의해 포착되어 인코딩 단계에 도달하지 않습니다.
쓰기 API는 자체적인 내부 유효성 검사도 수행합니다. 체크섬을 확인하고, 길이 제약 조건을 검증하며, 선택한 인코딩에 유효하지 않은 문자를 거부합니다. 위의 가드 절은 문제를 더 일찍 포착하여 호출자가 오류 메시지와 복구 경로를 제어할 수 있도록 합니다. 지원되는 인코딩 및 제약 조건의 전체 목록은 바코드 생성 방법 및 데이터에서 바코드 생성 가이드를 참조하세요.
후속 처리 전 결과를 검증하는 방법?
바코드 데이터가 다른 시스템(데이터베이스 쓰기, API 호출, 라벨 프린터)으로 전송될 때, 데이터를 전달하기 전에 결과 개수, 값 무결성 및 유형 검사를 하나의 재사용 가능한 메서드로 통합하는 것이 도움이 됩니다.
입력
읽기 대상으로 사용된 Code128 바코드 창고 스캔입니다.
: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
이 메서드는 null이 아닌 빈 리스트를 반환하므로 호출자는 반환 값에 대해 null 검사를 할 필요가 없습니다. 옵션 expectedType 매개변수는 심볼로지에 따라 필터링하여 동일한 이미지에서 QR 코드와 Code 128를 모두 스캔할 때 하류 시스템이 예상하지 않는 형식을 받지 않도록 합니다.
여러 파일을 일괄 적으로 읽으 려면 파일마다 동일한 패턴을 적용하고 결과를 집계하십시오. ExpectBarcodeTypes 옵션은 BarcodeReaderOptions에서 예상되는 심볼로지로 스캔을 좁혀서 원치 않는 결과가 검사기에 도달하지 않도록 합니다.
추가 자료
- 바코드 읽기 튜토리얼 : 스캔 구성 및 읽기 옵션.
- 출력 데이터 형식 가이드: 모든
BarcodeResult속성 및 그 유형입니다. - 데이터로부터 바코드 생성 : 각 심볼에 대한 인코딩 제약 조건.
- BarcodeReaderOptions API 참조 : 전체 구성 문서입니다.
- IronBarcode 변경 로그 : 버전별 수정 사항 및 기능 추가 사항.
파이프라인이 프로덕션 단계에 진입하면 라이선스 옵션을 확인하세요 .
자주 묻는 질문
바코드 작업에서 null 체크란 무엇인가요?
바코드 작업에서 null 체크는 바코드 결과나 입력이 null인지 확인하여 런타임 오류를 방지하고 원활한 바코드 처리를 보장하는 것입니다.
C# 바코드 작업에서 null 체크가 중요한 이유는 무엇인가요?
C# 바코드 작업에서 null 체크는 예외를 피하고 바코드 데이터가 없거나 잘못된 경우를 매끄럽게 처리할 수 있도록 보장하는 데 필수적입니다.
IronBarcode는 null 체크에 어떻게 도움을 주나요?
IronBarcode는 내장된 메소드를 제공하여 복잡한 유효성 검사 로직을 수동으로 구현하지 않고도 개발자가 바코드 데이터를 안전하게 관리할 수 있게 합니다.
IronBarcode에서 null 체크를 위한 몇 가지 모범 사례는 무엇인가요?
모범 사례에는 바코드 결과에서 null 값을 확인하고 처리를 시작하기 전에 입력을 검증하며, 신뢰도 필터를 사용하여 신뢰할 수 있는 바코드 스캔 결과를 보장하는 것이 포함됩니다.
IronBarcode가 신뢰도로 결과를 필터링하여 null 출력을 방지할 수 있나요?
네, IronBarcode는 바코드 결과를 신뢰도 수준에 따라 필터링할 수 있게 하여 null 출력을 줄이고 바코드 읽기의 높은 정확성을 보장합니다.
IronBarcode를 사용하여 입력을 기록하기 위한 유효성 검사가 가능한가요?
IronBarcode는 바코드에 인코딩되는 데이터가 올바르고 완전한지 확인하여 바코드 생성 시의 문제를 방지하기 위해 입력의 유효성을 검사할 수 있게 합니다.
null 바코드 결과를 처리하지 않으면 어떻게 되나요?
null 바코드 결과를 처리하지 않으면 런타임 예외가 발생할 수 있으며, 이는 애플리케이션의 흐름을 방해하여 잠재적인 충돌이나 잘못된 동작을 야기할 수 있습니다.
IronBarcode가 비즈니스 프로세스 효율성을 어떻게 향상시킬 수 있나요?
IronBarcode는 빠르고 정확한 바코드 생성 및 읽기를 가능하게 하여 수동 데이터 입력 오류를 줄이고, 재고 및 자산 추적을 향상시킴으로써 비즈니스 프로세스 효율성을 향상시킵니다.
IronBarcode를 프로젝트에 구현하려면 어떤 프로그래밍 기술이 필요하나요?
C# 프로그래밍의 기본 지식만 있으면 IronBarcode를 프로젝트에 구현하기에 충분합니다. IronBarcode는 개발자를 안내할 수 있는 간단한 메서드와 포괄적인 문서를 제공합니다.
IronBarcode는 소규모 프로젝트와 대규모 Enterprise 응용 프로그램 모두에 적합합니까?
IronBarcode는 확장 가능하고 다재다능하게 설계되어 소규모 프로젝트뿐만 아니라 견고한 바코드 솔루션이 필요한 대규모 Enterprise 응용 프로그램에 적합합니다.

