C# 中的 Null 处理技术
作者:互联网
在 C# 中,null 是一个特殊值,表示没有值。Null 可以分配给引用类型和可为空的值类型,但不能将其分配给不可为空的值类型。在 C# 中处理空值是编写健壮可靠代码的一个重要方面。在本文中,我将讨论在 C# 中处理空值的一些最常用的技术。
1.空合并运算符(??)
空合并运算符 (??) 是一种速记运算符,用于在左侧操作数不为空时返回左侧操作数,在左侧操作数为空时返回右侧操作数。当您需要在变量为 null 时提供默认值时,此运算符很有用。
例子:
字符串名称=空; 字符串结果 = 名称 ?? “未知”; 控制台.WriteLine(结果); // 输出:未知
在上面的示例中,由于 name 的值为 null,因此使用 null 合并运算符将“Unknown”的值分配给 result。
2.条件运算符(?:)
条件运算符 (?:) 是一个三元运算符,用于评估条件并在条件为真时返回一个值,在条件为假时返回另一个值。当您需要根据条件提供默认值时,此运算符很有用。
例子:
字符串名称=空; 字符串结果=(名称!=空)?名称:“未知”; 控制台.WriteLine(结果); // 输出:未知
在上面的示例中,由于 name 的值为 null,因此使用条件运算符将“Unknown”的值分配给 result。
3. 空条件运算符 (?.)
如果对象不为空,则空条件运算符 (?.) 用于访问对象的成员,否则返回空。当您需要访问可能为空的对象的属性或方法时,此运算符很有用。
例子:
字符串名称=空; 整数?length = name?.Length; 控制台.WriteLine(长度); // 输出:空
在上面的例子中,由于name的值为null,所以length的值也为null。
4.空合并赋值运算符(??=)
如果左侧操作数为空,则空合并赋值运算符 (??=) 用于将右侧操作数分配给左侧操作数。如果变量当前为 null,则此运算符可用于为变量分配默认值。它可以简化代码并使其更简洁。
例子:
字符串名称=空; 名称??= “未知”; 控制台.WriteLine(名字); // 输出:未知
在上面的示例中,由于 name 的值为 null,因此使用空合并赋值运算符将“Unknown”的值分配给 name。
5. Null-Forgiving 运算符 (!.)
允许空值的运算符 (!.) 用于告诉编译器一个值不为空,即使编译器无法确定该值不为空。当您知道某个值不会为 null,但编译器无法确定它不会为 null 时,此运算符很有用。
例子:
字符串名称 = null !; int length = name.Length; 控制台.WriteLine(长度); // 输出:System.NullReferenceException
在上面的例子中,null-forgiving 运算符用于告诉编译器 name 的值不为 null。但是,由于 name 的值实际上为 null,因此会在运行时抛出 System.NullReferenceException。
6. 使用 is 运算符
在 C# 编程语言中,“is”运算符是一个关键字,用于检查变量是否与特定类型兼容。通过在 C# 7.0 中引入对常量模式的支持,该运算符获得了额外的功能。具体来说,“is”运算符现在可用于将值与常量(例如 null)进行比较。
if (name is null ) { // 要执行的代码 } Console.WriteLine(name);
使用“is”运算符扩展了功能,使开发人员能够在其 C# 应用程序中执行类型检查和比较时编写更简洁和可读的代码。
或者,您也可以使用==
运算符检查null
:
对象obj = null ; if (obj == null ) { // 如果 obj 为 null 则执行某些操作 } else { // 如果 obj 不为 null 则执行其他操作 }
这两种方法都可行,但使用is
运算符检查null
可以更具可读性和表现力,尤其是与其他类型检查结合使用时。
7. 参数空异常
最后,ArgumentNullException 类用于处理传递给方法或构造函数的空参数。当您需要确保传递给方法或构造函数的参数不为空时,此类很有用。
例子:
public void DoSomething ( string name ) { if (name == null ) { throw new ArgumentNullException( nameof (name)); } Console.WriteLine( $"你好,{name}!" ); }
// 用法 DoSomething(null); // 输出:System.ArgumentNullException:值不能为空。(参数“名称”)
在上面的示例中,如果 name 的值为 null,则使用 ArgumentNullException 类抛出异常。
结论
处理空值在软件开发中是非常重要的事情。我们讨论了 7 种技术,您可以使用这些技术在 C# 中处理空值。此外,在 C# 中处理空值对于避免空引用异常和其他意外行为也很重要。