怎么在C#中使用可空类型

今天就跟大家聊聊有关怎么在C#中使用可空类型,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

1、可空类型基础知识

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

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

T?myNullableNum=rangedNum/newT?()ornull;

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

int?intClass=null;

或者使用

int?intClass=newint?()

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

Nullable<int>myNullableClass=newNullable<int>();

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

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

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

如果将可空类型转换为其基础类型,需要使用强制转换或其Value属性获取:

intmyInt=(int)myNullableInt;
intmyInt=myNullableInt.Value;
//以上两种方式,在可空类型实例为null时会抛出异常,可以使用以下方式代替
intmyInt=myNullableInt.GetValueOrDefault();//其重载方法可以传入默认值

2、可空类型的使用

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

int?k=10;
等同于
Nullable<int>k=newNullable<int>(10);

intm;//默认值为0
int?m;//默认值为null

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

int?num=null;
vark==num??9;

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

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

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

<data_type>?<variable_name>=null;

以下示例说明:

usingSystem;

namespaceExampleTest
{
classProgram
{
staticvoidMain(string[]args)
{
int?objectNull=null;
int?k=80;
double?db1=newdouble?();
double?db2=4.56;
bool?b=newbool?();

Console.WriteLine($"显示可空类型{objectNull},{k},{db1},{db2}");
Console.WriteLine($"一个可空的布尔值:{b}");
Console.ReadLine();
}
}
}

怎么在C#中使用可空类型

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

usingSystem;

namespaceExampleTest
{
classProgram
{
staticvoidMain(string[]args)
{
double?objNull=null;
double?k=4.85;
doubledb;
db=objNull??9.82;
Console.WriteLine($"num3的值:{db}");
db=k??6.02;
Console.WriteLine($"num3的值:{db}");
Console.ReadLine();
}
}
}

怎么在C#中使用可空类型

3、可空类型的案例使用

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

页面html

<div>
姓名:<inputid="Name"name="Name"/>
性别:<selectid="Kum"name="Kum">
<optionvalue="0">--请选择--</option>
<optionvalue="1">男</option>
<optionvalue="2">女</option>
</select>
</div>

传入参数Dto

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Web;

namespaceWebTest.Models
{
publicclassTestInDto
{
///<summary>
///隔离点
///</summary>
publicint?Kum{get;set;}

///<summary>
///姓名
///</summary>
publicstringName{get;set;}
}
}

控制器

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Web;
usingSystem.Web.Mvc;
usingWebTest.Models;

namespaceWebTest.Controllers
{
publicclassTestController:Controller
{
//GET:Test
publicActionResultIndex()
{
returnView();
}

publicActionResultTestFunction(TestInDtotestInDto)
{
if(!testInDto.Kum.HasValue)
returnJson(new{Success=false,Message="请选择性别",Data=""});

int?num=null;
DateTime?dt=null;
bool?b=null;
vardata=newTestOutDto
{
Name=testInDto.Name,
Num=num??10,
Dt=dt??DateTime.Now,
IsExist=b??false
};
returnJson(new{Success=true,Message="",Data=data});
}
}
}

看完上述内容,你们对怎么在C#中使用可空类型有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注恰卡编程网行业资讯频道,感谢大家的支持。

发布于 2021-03-21 22:39:12
收藏
分享
海报
0 条评论
154
上一篇:怎么在Vue中使用better-scroll实现轮播图 下一篇:如何在pandas中使用ix
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码