泛型应用:Nullable / ?? / ?.

更多
2020年04月09日 12点36分 作者:叶飞 修改

可空(Nullable)类型

复习:值类型变量会有一个不为null的默认值

但有时候需要一个值类型变量的值为null:

  • 方便和数据库交互
  • 比如性别(IsMale),通常用bool值,但可以有三个值:男、女和“没填写”
在值类型后面加一个问号(?),就可以声明一个该值类型相对象的可空类型。可空类型可以为null值


            int? i = 18;
            int j = i.Value;
            i = null;
            Console.WriteLine(i.HasValue);


演示:F12查看源代码

public struct Nullable<T> where T : struct

所以本质上,int?是Nullable<int>:

int? age = new Nullable<int>(32);

根据源代码演示/复习:

  • 泛型
  • 构造函数/属性/override/类型转换重载等


null运算

NullReferenceException是最常见的异常。

演示:形成过程,使用其他方法的返回值

为了避免抛出这种异常,以前我们不得不在代码中加上大量的null check语句:

            if (SQL.Teacher != null)
            {
                Console.WriteLine(SQL.Teacher.Name);
            }
            else
            {
                Console.WriteLine("course SQL has no teacher");
            }


null值替代运算符 ??

不为null值时,返回原值;为null值时,返回 ?? 后替代值

    SQL.Teacher = SQL.Teacher ?? new Teacher();

等同于:

    if (SQL.Teacher == null)
    {
        SQL.Teacher = new Teacher();
    }



null条件运算符 ?. 和 ?[]

只有 . 或者 [] 前面的变量不为null值的时候,才进行取值;否则返回null值。

    string name = SQL.Teacher?.Name;


等同于:

    string name = null;
    if (SQL.Teacher.Name != null)
    {
        name = SQL.Teacher.Name;
    }/*else name 仍然是null*/


综合

上述两种运算符,看一看这一句代码啥意思:

       Console.WriteLine(SQL.Teacher?.Name ?? "course SQL has no teacher");


C# null 可空类型
赞: 7 踩: 0

打赏
已收到打赏的 帮帮币

你的 打赏 非常重要!
为了保证文章的质量,每一篇文章的发布,都已经消耗了作者 1 枚 帮帮币
没有“帮帮币”,作者无法发布新的文章。

全系列阅读
评论 / 0

后台开发


ADO和EF

如何通过C#进行数据库的读取,包含ADO.NET和Entity Framework相关知识……

其他:WebForm和WebApi

其他ASP.NET框架,如WebForm、WebApi……

RazorPages(Core)

微软推荐的、最新的、基于Razor页面和.NET core的新一代Web项目开发技术,包括Razor Tag Helper、Model绑定和Validation、Session/Cookie、内置依赖注入等……

MVC(Framework)

过去两年间最流行的、基于.NET Framework和MVC模式的ASP.NET MVC框架,主要用于讲解安全、性能、架构和各种实战功能演示……

C#语法

从入门的变量赋值、分支循环、到面向对象,以及更先进的语言特性,如:泛型、Lambda、Linq、异步方法等…………

Java语法

面向过程的变量赋值、分支循环和函数封装;面向对象的封装、继承和多态;以及更高阶的常用类库(集合/IO/多线程……)、lambda等

Java Web开发

SpringMVC

分层架构和综合实战

全部
关键字



帮助

反馈