千家信息网

什么是可为空类型?

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,在项目中我们经常会遇到可为空类型,那么到底什么是可为空类型呢?下面我们将从4个方面为大家剖析。1、可空类型基础知识顾名思义,可空类型指的就是某个对象类型可以为空,同时也是System.Nullable
千家信息网最后更新 2026年11月03日什么是可为空类型?

在项目中我们经常会遇到可为空类型,那么到底什么是可为空类型呢?下面我们将从4个方面为大家剖析。

1、可空类型基础知识

顾名思义,可空类型指的就是某个对象类型可以为空,同时也是System.Nullable结构的实例。可空类型可以表示基础值类型正常范围的值,然后再加上一次null值。当然,也可以被赋值null值。比如Nullable可以被赋值true、false或者null。

声明一个可空类型的标准语句如下:

T? myNullableNum = rangedNum/new T?() or null;

比如,我们声明一个可空值类型并赋值null;

int? intClass = null;

或者使用

int? intClass = new int?()

同时,我们都知道,可空类型是泛型Nullable的实例,声明如下:

Nullable myNullableClass = new Nullable();

从声明中可以看出,它的基础类型T是可以包括struct和enum在内的任何值类型,但是不能是引用类型,也不能是可空类型;从这里我们可以看出,可能类型不能嵌套使用。

在可空类型中,它包含以下实例成员:

首先是HasValue,它是只读属性,用于判断对象是否有值。如果当前值为空,则返回true,否则返回flase;其次是Value,它也是只读属性,用于获取对象的值。如果当前值非空,则可以正常获取到对应的值,否则会抛出异常InvalidOperationException;接着是GetValueOrDefault()的实例方法。该方法通过HasValue和Value属性来得到当前的信息。如果当前值非空,即HasValue是true,则返回Value的值;否则返回T类型的默认值,即私有字段value的默认值。最后一个是GetValueOrDefault()实例方法。该方法依然是通过HasValue和Value属性来得到当前的信息。如果当前值非空,即HasValue是true,则返回Value的值,否则返回默认值defaultValue。

2、可空类型的使用

在可空类型中,常见的有使用单问号?和双问号??来进行设置。其中?常用于int,double,bool等无法直接赋值为null的数据类型;所代表的含义是这个数据类型是Nullable类型。

int? k=10;

等同于

Nullable k = new Nullable(10);

int m; //默认值为0

int? m; //默认值为null

而??主要用于在判断对象的值为null时所返回的指定的值。

int? num = null;

var k == num ?? 9;

对于可空类型,属于一种特殊的数据类型,它可表示所对应的基础值类型中正常范围内的值,再加上一个null值。

比如说一个int类型的对象,它可以被赋值为-2,147,483,648到2,147,483,647之间的任意值,也可以被赋值为null值。而对于一个bool类型的值来说,它可以是true、false也可以是null。

声明一个nullable类型(可控类型)的语法如下:

? = null;

以下示例说明:

using System;

namespace ExampleTest

{

class Program{    static void Main(string[] args)    {        int? objectNull = null;        int? k = 80;        double? db1 = new double?();        double? db2 = 4.56;        bool? b = new bool?();        Console.WriteLine($"显示可空类型{objectNull},{k},{db1},{db2}");        Console.WriteLine($"一个可空的布尔值:{b}");        Console.ReadLine();    }}

}

而对于??的合并运算符,它主要用于定义可空类型和引用类型的默认值。在其运算过程中,为类型转换定义了一个预设值,防止可空类型的值是null。

using System;

namespace ExampleTest

{

class Program{    static void Main(string[] args)    {        double? objNull = null;        double? k = 4.85;        double db;        db = objNull ?? 9.82;        Console.WriteLine($"num3的值:{db}");        db = k ?? 6.02;        Console.WriteLine($"num3的值:{db}");        Console.ReadLine();    }}

}

3、可空类型的案例使用

通过一个简单的前端查询功能来看看可空类型的使用。

页面html

姓名:性别:

传入参数Dto

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

namespace WebTest.Models

{

public class TestInDto{    ///     /// 隔离点    ///     public int? Kum { get; set; }    ///     /// 姓名    ///     public string Name { get; set; }}

}

控制器

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Mvc;

using WebTest.Models;

namespace WebTest.Controllers

{

public class TestController : Controller{    // GET: Test    public ActionResult Index()    {        return View();    }    public ActionResult TestFunction(TestInDto testInDto)    {        if (!testInDto.Kum.HasValue)            return Json(new { Success = false, Message = "请选择性别", Data = "" });        int? num = null;        DateTime? dt = null;        bool? b = null;        var data = new TestOutDto        {            Name = testInDto.Name,            Num = num ?? 10,            Dt = dt ?? DateTime.Now,            IsExist = b ?? false        };        return Json(new { Success = true, Message = "", Data = data });    }}

}

4、总结

最后想说说,可空类型在日常的项目中还是会经常使用到,针对每个逻辑层的方法对于传入参数和返回参数而言,都可能存在使用可空类型来进行处理和转化。

类型 实例 对象 方法 基础 属性 参数 数据 信息 同时 姓名 性别 范围 问号 项目 运算 选择 特殊 顾名思义 之间 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 南京欣网互联网络科技有限公司 互联网科技公司经营范围 互联网科技产业 美国互联网保险保险科技 互联网与科技金融数据 互联网科技公司电话 天津摩尔互联网科技 上海卓越科技 互联网 四川狮子座互联网科技 四个字互联网科技公司取名 央行互联网金融科技公司 互联网和黑科技的看法 世界互联网科技公司市值排名 新兴科技互联网创新大赛颁奖典礼 辽宁互联网新科技 电子商务与互联网科技的关系 梅州GM互联网络科技有限公司 信承诺互联网科技有限公司 云南互联网科技学费 安徽零酒互联网科技有限公司 互联网科技公司电话 互联网科技美容 深圳国际航运科技和互联网 昭通云南众福互联网科技有限公司 洛阳昕诺飞互联网科技有限公司 互联网公司黑科技创始人 黑科技 体验场景 互联网大会 下一代互联网重大应用科技园 广州燕处互联网科技有限公司 华人运通互联网科技公司
0