C#的基本特点之管理空值null运算符

本章描述了一些C#在Web应用程序开发使用的一些特性中的null条件运算符。主要用来对开发中一些空值的管理。

目录

管理空值运算符

使用null条件运算符

 链接null条件运算符

 结合条件运算符和合并运算符


准备工作

创建项目

创建一个简单的模型类,这样就可以使用一些数据。

 public class Products
    {
        public string Name { get; set; }
        public decimal? Price { get; set; }
        public static Products[]  GetProducts()
        {
             Products steering = new Products
            {
                Name = "Steering",
                Price = 12.5M
            };
            Products car = new Products
            {
                Name = "Car",
                Price = 654M
            };
            return new Products[] { steering , car ,null};
        }
    }

Products类定义了Name和Price属性,有一个名为GetProducts的静态方法返回Products数组,GetProducts方法返回的数组包含一个设置为null的元素。

管理空值运算符

使用null条件运算符

null条件运算符允许更优雅的检测空值,在开发过程中可能回进行很多的空值检查,请求是否包含特定的头或值,或者模型是否包含特定的数据项等等。传统的处理空值需要显式检查。当需要检查对象及其属性时,这种检查可能会有点乏味,并且容易出错。null条件运算符使这个过程更简单,更简洁。

创建控制器和视图

//ProductController 控制器代码
public class ProductController : Controller
    {
        public ViewResult Index()
        {

            List<string> result = new List<string>();
            foreach (Products p in Products.GetProducts())
            {
                string name = p?.Name;
                decimal? price = p?.Price;
                result.Add(string.Format("Name:{0},Price:{1}", name, price));
            }
            return View(result);
        }
    }

在Index方法中检查Products对象,以获取Name和Price的列表。问题是数组中的的对象和属性的值都有可能是null,在循环中引用到了p.Name和p.Price,这可能会导致NullReferenceException异常。为避免这种情况,使用null条件运算符。

null运算符就是一个❓(?字符),如果p的值是null,那么名称Name也设置为null,如果p不为null,那么名称就设置为Products.Named的值。Price属性以此类推。有一个需要注意的点是,在使用null条件运算符时,指定的变量能够赋值为空。 

@*index视图代码*@
<ul>
    @foreach (string s in Model)
    {
        <li>@s</li>
    }
</ul>
Index视图运行效果

 链接null条件运算符

可以链接null条件运算符,在对象层次结构中导航,这样就它就成为简化代码和允许安全导航的有效工具。

在模型类中添加了一个更复杂的对象结构

 每个Products对象都有一个相关属性,该属性可能引用到另一个Products对象,在GetProducts方法中为car对象设置了相关属性steering

修改controller方法,链接null条件运算符来导航对象属性,检测嵌套的空值

  上图可见,null条件运算符可以运用到属性链的每一个部分,当p.Realted为空时,relatedName变量将为空,否则变量将会被赋值为p.RelatedName的值。

Index视图运行效果

 结合条件运算符和合并运算符

将null条件运算符(一个问号)和null合并运算符(两个问号)结合使用,可以设置回退值,以防在应用程序中使用空值。

修改controller方法,组合null运算符

Index视图运行效果

总结:

null条件运算符确保在浏览对象属性时不会得到NullReferenceException异常,null合并运算符确保在浏览器中显示的结果中不包含空值。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值