.NET 帮助 C# 可空类型(开发者用法) Curtis Chau 已更新:七月 28, 2025 Download IronPDF NuGet 下载 DLL 下载 Windows 安装程序 Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article 当使用C#时,你往往需要处理空值,尤其是引用类型。C#中的可空类型提供了一种对值类型表示未定义或缺失值的方法。本指南介绍了C#可空类型的重要性,它们的实际用途,以及如何在不同情况下工作。 我们将在文章后面探讨IronPDF。 C#中的可空类型 默认情况下,C#(例如int、bool、DateTime)中的值类型不能被赋予空值。 为了解决这一限制,C#引入了可空值类型,允许你将空赋给值类型。当你需要表示缺失的有效值时,可空类型特别有用。 声明可空类型 要在C#中声明可空类型,你可以使用以下语法: // Declare a nullable integer int? nullableInt = null; // Declare a nullable integer int? nullableInt = null; ' Declare a nullable integer Dim nullableInt? As Integer = Nothing $vbLabelText $csharpLabel 这里,int?是Nullable<int>的简写。 nullableInt变量可以存储一个int值或空值。 检查空值 要检查可空类型变量是否有值,你可以使用HasValue属性或直接与空值进行比较,如下所示: 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."); } If nullableInt.HasValue Then ' 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.") End If $vbLabelText $csharpLabel 或者,你可以使用空合并运算符(??)在可空类型为空时提供一个默认值: // 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); ' Assign 0 if nullableInt is null Dim result As Integer = If(nullableInt, 0) Console.WriteLine("Result: " & result) $vbLabelText $csharpLabel 如果nullableInt为空,result将被赋予默认值0。 可空值类型与可空引用类型 在C#中,值类型(如int、bool和double)与引用类型(如string,object)不同。 可空值类型允许值类型表示空值,而可空引用类型允许引用类型默认情况下不可为空,从而减少空引用异常的风险。 可空值类型 可空值类型允许一个值类型接受空值。 要声明可空值类型,在数据类型后加一个问号?: // Declare a nullable double double? nullableDouble = null; // Declare a nullable double double? nullableDouble = null; ' Declare a nullable double Dim nullableDouble? As Double = Nothing $vbLabelText $csharpLabel 在这个例子中,nullableDouble可以存储一个double值或空值。 可空引用类型 可空引用类型是在C# 8.0中引入的。你可以在项目级别启用可空引用类型,或者通过在代码文件的开头添加#nullable enable指令启用。启用可空引用类型后,必须显式标记引用类型为可空的?,以避免可能的由于空引用导致的运行时异常。 #nullable enable // Declare a nullable string string? nullableString = null; #nullable enable // Declare a nullable string string? nullableString = null; 'INSTANT VB TODO TASK: There is no equivalent to #nullable in VB: '#nullable enable ' Declare a nullable string 'INSTANT VB WARNING: Nullable reference types have no equivalent in VB: 'ORIGINAL LINE: string? nullableString = null; Dim nullableString As String = Nothing $vbLabelText $csharpLabel 这里,nullableString被允许为空。 如果你声明一个不带?的非可空引用类型,编译器将发出警告,如果检测到潜在空值赋值。 启用可空引用类型 要在项目中全局启用可空引用类型,向你的.csproj文件添加以下行: <Nullable>enable</Nullable> <Nullable>enable</Nullable> XML 一旦启用,编译器将默认将引用类型视为不可为空。 该特性特别有助于在编译时捕捉空引用问题,而不是在运行时。 实用示例 让我们探索一些实用示例来巩固你对可空类型的理解。 示例 1: 带值类型的可空类型 在这个示例中,我们将使用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"); } } } Friend Class Program Shared Sub Main(ByVal args() As String) Dim nullableInt? As Integer = Nothing ' Use null coalescing operator to assign a default value Dim b As Integer = If(nullableInt, 10) Console.WriteLine("b: " & b) If nullableInt.HasValue Then ' nullableInt has a value Console.WriteLine("nullableInt has value: " & nullableInt.Value) Else ' nullableInt is null Console.WriteLine("nullableInt is null") End If End Sub End Class $vbLabelText $csharpLabel 这里,nullableInt是int的可空类型变量。 如果nullableInt为空,b由于空合并运算符将获得值10。 否则,b将获得nullableInt的值。 示例 2: 可空引用类型 现在,让我们看看可空引用类型是如何工作的: #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); } } 'INSTANT VB TODO TASK: There is no equivalent to #nullable in VB: '#nullable enable Friend Class Program Shared Sub Main() 'INSTANT VB WARNING: Nullable reference types have no equivalent in VB: 'ORIGINAL LINE: string? nullableString = null; Dim nullableString As String = Nothing Dim nonNullableString As String = "Hello" ' Use null coalescing operator to provide a default value for length Console.WriteLine(If(nullableString?.Length, 0)) Console.WriteLine(nonNullableString.Length) End Sub End Class $vbLabelText $csharpLabel 在上面的代码中,nullableString可以为空,并且空合并运算符确保如果为空,字符串的长度默认值为0。 示例 3: 嵌套可空类型 C#允许你声明嵌套的可空类型。例如: // Redundant, but syntactically valid int? nestedNullableInt = null; // Redundant, but syntactically valid int? nestedNullableInt = null; ' Redundant, but syntactically valid Dim nestedNullableInt? As Integer = Nothing $vbLabelText $csharpLabel 虽然嵌套的可空类型可能显得多余,但在C#中它们是语法上有效的。 然而,在实践中,嵌套可空类型不提供任何额外功能,且很少使用。 空合并运算符(??) 空合并运算符(??)经常用于可空类型以在可空类型为空时提供默认值。 此运算符通过避免显式的if-else检查简化代码。 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; Dim nullableValue? As Integer = Nothing ' Assign -1 if nullableValue is null Dim defaultValue As Integer = If(nullableValue, -1) $vbLabelText $csharpLabel 在此示例中,如果nullableValue为空,defaultValue将被赋值为-1。否则,defaultValue将获取nullableValue的值。 编译时错误与可空类型 启用可空引用类型时,C#在编译时产生警告和错误,当它检测到潜在的空值赋值问题。 这些编译时错误有助于提前捕捉问题,使你的代码更为健壮。 在此示例中,IronPDF用于将HTML内容渲染为PDF文档,然后保存到指定位置。 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; 'INSTANT VB WARNING: Nullable reference types have no equivalent in VB: 'ORIGINAL LINE: string? nullableString = null; Dim nullableString As String = Nothing ' This will produce a compiler warning because nullableString may be null Dim nonNullableString As String = nullableString $vbLabelText $csharpLabel 在这种情况下,将nullableString赋予nonNullableString会产生编译器警告,因为nullableString可能为空,并赋予给非可空类型可能导致运行时异常。 在IronPDF中使用可空类型 IronPDF是一个C#的PDF库,旨在帮助开发人员直接从.NET应用程序创建、编辑和操作PDF文件。 你可以将HTML转换为PDF,生成报告,甚至处理复杂的文档结构。 可空类型在动态生成报告场景中特别有用,比如当您生成一个会计师的PDF报告而财务数据不完整时。 通过使用可空类型,你可以管理可选字段,避免异常,并提供默认值。 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."); } } Imports IronPdf Friend Class Program Shared Sub Main(ByVal args() As String) Dim optionalIncome? As Integer = Nothing ' Nullable type for optional income 'INSTANT VB WARNING: Nullable reference types have no equivalent in VB: 'ORIGINAL LINE: string? clientName = "Iron Dev"; Dim clientName As String = "Iron Dev" ' Nullable reference type for client name Dim renderer = New ChromePdfRenderer() Dim htmlContent As String = $" <h1>Financial Report</h1> <p>Client Name: {If(clientName, "Unknown")}</p>ignoreignore<p>Income: {If(optionalIncome?.ToString(), "Data not available")}</p>" ' Render the HTML to a PDF Dim pdf = renderer.RenderHtmlAsPdf(htmlContent) ' Save the PDF to disk pdf.SaveAs("FinancialReport.pdf") Console.WriteLine("PDF Generated Successfully.") End Sub End Class $vbLabelText $csharpLabel 在此代码中,使用可空类型(int?和string?)来安全地处理丢失的数据。 空合并运算符(??)确保如果任何数据缺失,将在PDF中使用默认值。 结论 C#中的可空类型是处理值类型和引用类型中空值的有力工具。通过使用可空类型,您可以避免空引用异常并提高代码的健壮性。 记得在新项目中启用可空引用类型以便从编译时错误检查中受益,并使用空合并运算符(??)以简化处理可空类型时的代码。 IronPDF提供一个免费试用以帮助你在做出承诺前探索其功能。 无需提前付费,你可以试水并看它如何适合你的开发过程。 一旦准备好继续,License起价为$799。 常见问题解答 可空类型如何在动态PDF生成中被利用? 可空类型在动态PDF生成中非常重要,因为它们允许安全地表示可选字段,使用像IronPDF这样的库。这确保了缺失数据被恰当地处理,并在需要时提供默认值。 在C#中声明可空类型的语法是什么? 在C#中,可以通过在数据类型后附加一个问号 '?' 来声明可空类型。例如,要声明一个可空整型,你可以写 int? nullableInt = null;。 C#中的可空类型会影响生成报告的稳健性吗? 是的,使用可空类型可以增强生成报告的稳健性,确保当可选字段的值缺失时不会引发错误。像IronPDF这样的库可以利用可空类型来有效管理这些情况。 可空引用类型如何帮助防止运行时错误? 可空引用类型在C# 8.0中引入,允许引用类型默认不可为空,帮助防止运行时错误。这减少了空引用异常的风险,并在编译时允许及早检测潜在问题。 在管理可空类型时,空合并运算符的作用是什么? 在管理可空类型时,空合并运算符 ?? 提供默认值,当可空类型为空时,这简化了代码并避免显式的if-else检查。 如何在C#中检查可空类型是否有值? 可以通过使用 HasValue 属性或直接将变量与null进行比较来确定可空类型在C#中是否有值。 使用可空类型在C#应用程序中的典型场景是什么? 可空类型通常用于数据可能不完整或可选的情况,例如表单输入、配置设置,或在接口允许null值的数据库中。它们在动态报告生成中尤为有用,使用像IronPDF这样的库。 启用可空引用类型如何影响C#项目的编译? 在C#项目中启用可空引用类型会导致编译时警告和错误,以应对潜在的空引用问题,从而及早捕捉问题并促进更稳健的代码开发。 Curtis Chau 立即与工程团队聊天 技术作家 Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。 相关文章 已更新九月 4, 2025 RandomNumberGenerator C# 使用 RandomNumberGenerator C# 类可以帮助将您的 PDF 生成和编辑项目提升到一个新的高度。 阅读更多 已更新九月 4, 2025 C# String Equals(开发者用法) 与强大的 PDF 库 IronPDF 结合使用,切换模式匹配允许您为文档处理构建更智能、更简洁的逻辑。 阅读更多 已更新八月 5, 2025 C# Switch 模式匹配(开发者用法) 与强大的 PDF 库 IronPDF 结合使用,切换模式匹配允许您为文档处理构建更智能、更简洁的逻辑。 阅读更多 C# ConfigureAwait(开发者用法)C# 命名约定(开发者用法)
已更新九月 4, 2025 RandomNumberGenerator C# 使用 RandomNumberGenerator C# 类可以帮助将您的 PDF 生成和编辑项目提升到一个新的高度。 阅读更多