HasValue 返回的结果是bool类型。只可以用来判断,判断可空类型是否有除了null以外的值,有则返回true,否则就返回 false 。
注:NULL 和空的区别:NULL不占用任何内存空间,空占用了一个1个长度的内存空间(C#中)。
网上介绍:举例代码如下
// 数据类型? 表示参数的值可以为null空,此时这个参数可调用属性hasvalue来判断,此参数是否有除了null以外的值;进而进行其它的工作
//必须要加?才可用hasvalue属性
private int? x = null; //或者写成private int? x 一个作用
private void Form1_Load(object sender, EventArgs e)
{
//学习hasvalue方法
if (x.HasValue) //初始时x无值,故不会执行此代码
{
MessageBox.Show("_value参数无值");
}
x = 2;//对x进行供值
if (x.HasValue)//此时hasvalue就为true,就执行如下的代码了
{
MessageBox.Show("_value参数又有值了");
}
}
我的应用:获取监管银行管理行入网信息表中的服务截止日期,判断其是否为空,为空则抛出异常“头部信息错误”
else if (pRequestHead.User_Type != "1")
{
// 校验APP_ID
var rwInfo = new JGYHZHRWService().FindRWInfoByAppId(pRequestHead.APP_ID);
if (
rwInfo == null ||
!rwInfo.QDM.Equals(pRequestHead.Area_Code) ||
!rwInfo.JGYHDLBH.Equals(pRequestHead.Bank_Code) ||
!"1".Equals(rwInfo.JGYHZHZTDM) ||
!"1".Equals(rwInfo.ZTDM) ||
(
rwInfo.FWJZRQ.HasValue &&
(DateTime.Now > Convert.ToDateTime(rwInfo.FWJZRQ))
)
)
{
BusCheckBase.NewBusinessException(ResourcesCode.C_4005);
}
#region 校验Token
var vToken = SOEI.Infrastructure.Encrypt.GetMD5(
string.Format(
"APP_ID{0}Area_Code{1}Bank_Code{2}Op_Code{3}TIMESTAMP{4}TRANS_ID{5}{6}",
rwInfo.APP_ID,
rwInfo.QDM,
rwInfo.JGYHDLBH,
pRequestHead.Op_Code,
pRequestHead.TIMESTAMP,
pRequestHead.TRANS_ID,
rwInfo.APP_SECRET
),
Encoding.UTF8,
false
);
if (!vToken.Equals(pRequestHead.TOKEN))
{
BusCheckBase.NewBusinessException(ResourcesCode.C_4005);
}
vJGYHXLBH = rwInfo.JGYHXLBH;
}