使用条件和空合并运算符
介绍
空值检查是开发高质量 C# 代码的重要部分。如果代码尝试访问空对象引用的成员,则会抛出 NullReferenceException 。但是,使用if语句检查空引用会使代码更加冗长。
空合并和空条件运算符可以减少为避免NullReferenceException而需要编写的代码量。本文介绍如何使用这些运算符。
空值检查
考虑一下此代码。它抛出了一个NullReferenceException。
internal class Program
{
private static void Main(string[] args)
{
Item item = null;
Console.WriteLine($"Name: {item.Name}");
}
}
internal class Item
{
public string Name { get; }
}
为了修复此代码,我们可以添加一个if语句来检查是否为空。
private static void Main(string[] args)
{
Item item = null;
if (item != null)
{
Console.WriteLine($"Name: {item.Name}");
}
else
{
Console.WriteLine($"Name: ");
}
}
但是,上述代码增加了复杂性并创建了另一条代码路径。
空条件运算符
解决此问题的另一种方法是使用空条件运算符?。
private static void Main(string[] args)
{
Item item = null;
Console.WriteLine($"Name: {item?.Name}");
}
?右侧的部分仅在左侧部分不为空时才计算结果。否则,代码返回 null。因此,在上述情况下,item?.Name计算结果为 null,但不会引发异常,因为没有尝试访问 null 引用上的成员。对命名空间、类型、数组元素、访问方法的成员使用 null 条件运算符,或调用委托。
下面的类有两个方法会引发事件。如果没有附加事件处理程序,危险版本会引发NullReferenceException 。安全版本则不会。即使没有附加事件处理程序,调用该方法也始终是安全的。
public class LongProcess
{
public event EventHandler<string> Finished;
public void FinishSafely()
{
Finished?.Invoke(this, "The process finished successfully");
}
public void FinishDangerously()
{
Finished.Invoke(this, "The process finished successfully");
}
}
空合并运算符
??是空合并运算符。如果它不是空引用,则返回左侧部分的值。否则,返回右侧部分的值。使用此运算符可返回给定值。
如果语句可能返回 null,则可以使用 null 合并运算符来确保返回合理的值。此代码返回项目的名称,如果项目为 null ,则返回默认名称。如您所见,此运算符在使用 null 条件运算符时是一个方便的工具。
private static void Main(string[] args)
{
var defaultName = "Default";
Item item = null;
Console.WriteLine($"Name: {item?.Name ?? defaultName}");
Console.ReadLine();
}
输出:
默认
从 C# 7 开始,可以使用空合并运算符来缩短参数验证。此类需要构造函数中的消息参数。在 C# 7 之前,验证需要if语句。
internal class MessageProcessor
{
private readonly string _Message;
public MessageProcessor(string message)
{
if (message == null) throw new ArgumentNullException(nameof(message));
_Message = message;
}
}
使用空合并运算符可以将其缩短为下面的代码。
internal class MessageProcessor
{
private readonly string _Message;
public MessageProcessor(string message)
{
_Message = message ?? throw new ArgumentNullException(nameof(message));
}
}
结论
空值检查对于代码稳定性非常重要。空值条件运算符可用于简化空值检查。空值合并运算符是空值检查的一个很好的补充,可以进一步简化旨在返回非空值的代码。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~