.NET 도움말 C# Nullable Types (How It Works For Developers) 커티스 차우 업데이트됨:7월 28, 2025 다운로드 IronPDF NuGet 다운로드 DLL 다운로드 윈도우 설치 프로그램 무료 체험 시작하기 LLM용 사본 LLM용 사본 LLM용 마크다운 형식으로 페이지를 복사하세요 ChatGPT에서 열기 ChatGPT에 이 페이지에 대해 문의하세요 제미니에서 열기 제미니에게 이 페이지에 대해 문의하세요 Grok에서 열기 Grok에게 이 페이지에 대해 문의하세요 혼란 속에서 열기 Perplexity에게 이 페이지에 대해 문의하세요 공유하다 페이스북에 공유하기 트위터에 공유하기 LinkedIn에 공유하기 URL 복사 이메일로 기사 보내기 When working with C#, you often need to handle null values, especially with reference types. Nullable types in C# provide a way to represent undefined or absent values for value types. This guide covers the essentials of C# nullable types, their practical uses, and how they work under different scenarios. We'll explore the IronPDF as well later in the article. Nullable Types in C# By default, value types in C# (e.g., int, bool, DateTime) cannot be assigned null values. To address this limitation, C# introduces nullable value types, allowing you to assign null to value types. Nullable types are particularly useful when you need to represent the absence of a valid value. Declaring Nullable Types To declare a nullable type in C#, you use the following syntax: // Declare a nullable integer int? nullableInt = null; // Declare a nullable integer int? nullableInt = null; $vbLabelText $csharpLabel Here, int? is shorthand for Nullable<int>. The nullableInt variable can hold either an int value or null. Checking for null To check if a nullable type variable has a value or not, you can use the HasValue property or compare the variable directly with null, as shown below: if (nullableInt.HasValue) { // If nullableInt has a value, print it Console.WriteLine("Value: " + nullableInt.Value); } else { // If nullableInt does not have a value, print a message Console.WriteLine("No value assigned."); } if (nullableInt.HasValue) { // If nullableInt has a value, print it Console.WriteLine("Value: " + nullableInt.Value); } else { // If nullableInt does not have a value, print a message Console.WriteLine("No value assigned."); } $vbLabelText $csharpLabel Alternatively, you can use the null coalescing operator (??) to provide a default value when the nullable type is null: // Assign 0 if nullableInt is null int result = nullableInt ?? 0; Console.WriteLine("Result: " + result); // Assign 0 if nullableInt is null int result = nullableInt ?? 0; Console.WriteLine("Result: " + result); $vbLabelText $csharpLabel If nullableInt is null, result will be assigned the default value of 0. Nullable Value Types vs Nullable Reference Types In C#, value types (such as int, bool, and double) differ from reference types (like string, object). Nullable value types allow value types to represent null, while nullable reference types allow reference types to be non-nullable by default, thus reducing the risk of null reference exceptions. Nullable Value Types A nullable value type allows a value type to take a null value. To declare a nullable value type, append a question mark ? to the data type: // Declare a nullable double double? nullableDouble = null; // Declare a nullable double double? nullableDouble = null; $vbLabelText $csharpLabel In this example, nullableDouble can hold a double value or null. Nullable Reference Types Nullable reference types were introduced in C# 8.0. You can enable nullable reference types at the project level or by adding the #nullable enable directive at the beginning of your code file. With nullable reference types enabled, reference types must be explicitly marked as nullable using ?, helping to avoid potential runtime exceptions caused by null references. #nullable enable // Declare a nullable string string? nullableString = null; #nullable enable // Declare a nullable string string? nullableString = null; $vbLabelText $csharpLabel Here, nullableString is allowed to be null. If you declare a non-nullable reference type without the ?, the compiler will produce warnings if it detects potential null assignments. Enabling Nullable Reference Types To enable nullable reference types globally in a project, add the following line to your .csproj file: <Nullable>enable</Nullable> <Nullable>enable</Nullable> XML Once enabled, the compiler will treat reference types as non-nullable by default. This feature is especially handy to catch null reference issues at compile time rather than at runtime. Practical Examples Let’s explore some practical examples to solidify your understanding of nullable types. Example 1: Nullable Type with Value Types In this example, we’ll use a nullable type with int: class Program { static void Main(string[] args) { int? nullableInt = null; // Use null coalescing operator to assign a default value int b = nullableInt ?? 10; Console.WriteLine("b: " + b); if (nullableInt.HasValue) { // nullableInt has a value Console.WriteLine("nullableInt has value: " + nullableInt.Value); } else { // nullableInt is null Console.WriteLine("nullableInt is null"); } } } class Program { static void Main(string[] args) { int? nullableInt = null; // Use null coalescing operator to assign a default value int b = nullableInt ?? 10; Console.WriteLine("b: " + b); if (nullableInt.HasValue) { // nullableInt has a value Console.WriteLine("nullableInt has value: " + nullableInt.Value); } else { // nullableInt is null Console.WriteLine("nullableInt is null"); } } } $vbLabelText $csharpLabel Here, nullableInt is a nullable type variable of int. If nullableInt is null, b gets the value 10 due to the null coalescing operator. Otherwise, b takes the value of nullableInt. Example 2: Nullable Reference Types Now, let’s see how nullable reference types work: #nullable enable class Program { static void Main() { string? nullableString = null; string nonNullableString = "Hello"; // Use null coalescing operator to provide a default value for length Console.WriteLine(nullableString?.Length ?? 0); Console.WriteLine(nonNullableString.Length); } } #nullable enable class Program { static void Main() { string? nullableString = null; string nonNullableString = "Hello"; // Use null coalescing operator to provide a default value for length Console.WriteLine(nullableString?.Length ?? 0); Console.WriteLine(nonNullableString.Length); } } $vbLabelText $csharpLabel In the code above, nullableString can be null, and the null coalescing operator ensures that if it is null, the length of the string defaults to 0. Example 3: Nested Nullable Types C# allows you to declare nested nullable types. For example: // Redundant, but syntactically valid int? nestedNullableInt = null; // Redundant, but syntactically valid int? nestedNullableInt = null; $vbLabelText $csharpLabel While nested nullable types may seem redundant, they are syntactically valid in C#. However, in practice, nested nullable types don't provide any additional functionality and are rarely used. Null Coalescing Operator (??) The null coalescing operator (??) is frequently used with nullable types to provide a default value when the nullable type is null. This operator simplifies code by avoiding explicit if-else checks. int? nullableValue = null; // Assign -1 if nullableValue is null int defaultValue = nullableValue ?? -1; int? nullableValue = null; // Assign -1 if nullableValue is null int defaultValue = nullableValue ?? -1; $vbLabelText $csharpLabel In this example, if nullableValue is null, defaultValue will be assigned -1. Otherwise, defaultValue will take the value of nullableValue. Compile-Time Errors and Nullable Types With nullable reference types enabled, C# produces warnings and errors during compilation when it detects potential issues with null assignments. These compile-time errors help catch issues early, making your code more robust. Consider the following example: string? nullableString = null; // This will produce a compiler warning because nullableString may be null string nonNullableString = nullableString; string? nullableString = null; // This will produce a compiler warning because nullableString may be null string nonNullableString = nullableString; $vbLabelText $csharpLabel In this case, assigning nullableString to nonNullableString produces a compiler warning because nullableString may be null, and assigning it to a non-nullable type could lead to runtime exceptions. Using Nullable Types with IronPDF IronPDF is a C# PDF library designed to help developers create, edit, and manipulate PDF files directly from .NET applications. You can convert HTML to PDF, generate reports, or even handle complex document structures. Nullable types are especially useful in dynamic report generation scenarios, such as when you're generating a PDF for an accountant with incomplete financial data. By using nullable types, you can manage optional fields, avoid exceptions, and provide default values. using IronPdf; class Program { static void Main(string[] args) { int? optionalIncome = null; // Nullable type for optional income string? clientName = "Iron Dev"; // Nullable reference type for client name var renderer = new ChromePdfRenderer(); string htmlContent = $@" <h1>Financial Report</h1> <p>Client Name: {clientName ?? "Unknown"}</p> <p>Income: {optionalIncome?.ToString() ?? "Data not available"}</p>"; // Render the HTML to a PDF var pdf = renderer.RenderHtmlAsPdf(htmlContent); // Save the PDF to disk pdf.SaveAs("FinancialReport.pdf"); Console.WriteLine("PDF Generated Successfully."); } } using IronPdf; class Program { static void Main(string[] args) { int? optionalIncome = null; // Nullable type for optional income string? clientName = "Iron Dev"; // Nullable reference type for client name var renderer = new ChromePdfRenderer(); string htmlContent = $@" <h1>Financial Report</h1> <p>Client Name: {clientName ?? "Unknown"}</p> <p>Income: {optionalIncome?.ToString() ?? "Data not available"}</p>"; // Render the HTML to a PDF var pdf = renderer.RenderHtmlAsPdf(htmlContent); // Save the PDF to disk pdf.SaveAs("FinancialReport.pdf"); Console.WriteLine("PDF Generated Successfully."); } } $vbLabelText $csharpLabel In this code, nullable types (int? and string?) are used to handle missing data safely. The null coalescing operator (??) ensures that if any data is missing, a default value is used in the PDF. Conclusion Nullable types in C# are a powerful tool for handling null values in both value types and reference types. By using nullable types, you can avoid null reference exceptions and improve the robustness of your code. Remember to enable nullable reference types in new projects to benefit from compile-time error checking, and use the null coalescing operator (??) to simplify your code when dealing with nullable types. IronPDF offers a free trial to help you explore its features before making a commitment. With no cost upfront, you can test the waters and see how it fits into your development process. Once you're ready to move forward, licenses start from $799. 자주 묻는 질문 동적 PDF 생성에서 널러블 유형을 어떻게 활용할 수 있나요? Null 가능 유형은 IronPDF와 같은 라이브러리를 사용하여 선택적 필드를 안전하게 표현할 수 있도록 함으로써 동적 PDF 생성에 매우 중요합니다. 이렇게 하면 누락된 데이터를 적절히 처리하고 필요한 경우 기본값을 제공할 수 있습니다. C#에서 널 가능 유형을 선언하는 구문은 무엇인가요? C#에서는 데이터 유형에 물음표 '?'를 추가하여 null 가능 유형을 선언할 수 있습니다. 예를 들어, null 가능한 정수를 선언하려면 int? nullableInt = null;를 작성하면 됩니다. C#의 null 가능 유형이 생성된 보고서의 견고성에 영향을 미칠 수 있나요? 예, 널 가능 유형을 사용하면 선택적 필드에 값이 없을 때 오류가 발생하지 않도록 하여 생성된 보고서의 견고성을 높일 수 있습니다. IronPDF와 같은 라이브러리에서는 이러한 조건을 효율적으로 관리하기 위해 널러블 타입을 활용할 수 있습니다. 널러블 참조 유형이 런타임 오류를 방지하는 데 어떻게 도움이 되나요? C# 8.0에 도입된 널러블 참조 유형은 기본적으로 참조 유형을 널러블이 아닌 것으로 허용하여 런타임 오류를 방지하는 데 도움이 됩니다. 이를 통해 null 참조 예외의 위험을 줄이고 컴파일 중에 잠재적인 문제를 조기에 감지할 수 있습니다. 널 가능 유형을 관리할 때 널 합치기 연산자의 역할은 무엇인가요? 널 결합 연산자 ??는 널 가능 유형이 널일 때 기본값을 제공하여 널 가능 유형을 관리하는 데 사용됩니다. 이 연산자는 코드를 간소화하고 명시적인 if-else 검사를 피하는 데 도움이 됩니다. C#에서 널 가능 유형에 값이 있는지 어떻게 확인할 수 있나요? C#에서 null 가능 유형에 값이 있는지 확인하려면 HasValue 속성을 사용하거나 변수를 null과 직접 비교하여 확인할 수 있습니다. C# 애플리케이션에서 널러블 유형을 사용하는 일반적인 시나리오에는 어떤 것이 있나요? Null 가능 유형은 양식 입력, 구성 설정 등 데이터가 불완전하거나 선택 사항일 수 있는 상황 또는 null 값을 허용하는 데이터베이스와 인터페이스할 때 자주 사용됩니다. 특히 IronPDF와 같은 라이브러리를 사용한 동적 보고서 생성에 유용합니다. 널러블 참조 유형을 활성화하면 C# 프로젝트 컴파일에 어떤 영향을 미치나요? C# 프로젝트에서 널 가능 참조 유형을 활성화하면 잠재적인 널 참조 문제에 대한 컴파일 타임 경고 및 오류가 발생하여 문제를 조기에 파악하고 보다 강력한 코드 개발을 촉진할 수 있습니다. 커티스 차우 지금 바로 엔지니어링 팀과 채팅하세요 기술 문서 작성자 커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다. 커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다. 관련 기사 업데이트됨 12월 11, 2025 Bridging CLI Simplicity & .NET : Using Curl DotNet with IronPDF Jacob Mellor has bridged this gap with CurlDotNet, a library created to bring the familiarity of cURL to the .NET ecosystem. 더 읽어보기 업데이트됨 12월 20, 2025 RandomNumberGenerator C# Using the RandomNumberGenerator C# class can help take your PDF generation and editing projects to the next level 더 읽어보기 업데이트됨 12월 20, 2025 C# String Equals (How it Works for Developers) When combined with a powerful PDF library like IronPDF, switch pattern matching allows you to build smarter, cleaner logic for document processing 더 읽어보기 C# ConfigureAwait (How It Works For Developers)C# Naming Conventions (How It Works...
업데이트됨 12월 11, 2025 Bridging CLI Simplicity & .NET : Using Curl DotNet with IronPDF Jacob Mellor has bridged this gap with CurlDotNet, a library created to bring the familiarity of cURL to the .NET ecosystem. 더 읽어보기
업데이트됨 12월 20, 2025 RandomNumberGenerator C# Using the RandomNumberGenerator C# class can help take your PDF generation and editing projects to the next level 더 읽어보기
업데이트됨 12월 20, 2025 C# String Equals (How it Works for Developers) When combined with a powerful PDF library like IronPDF, switch pattern matching allows you to build smarter, cleaner logic for document processing 더 읽어보기