C#类型后加问号 int?

偶然间发现C#类型还有一种特殊的操作,就是在类型后面加上问号。这种类型是可为空的类型。

int? a=null; //可为空的int类型
a=10;

float? b=null;//可为空的float类型
b=12.1f;

double? c=null;//可为空的double类型
c=100.059;

//... ...

//string 类型没有 string?的形式

//如何使用呢?
int age = a + 10;//这个会报错的

//正确使用方法如下
if(a != null )
    int age1 = a.Value + 10;//

其实这种类型是非常有用的,因为现实中就是会有这样的需求,对于某些变量可以为空也可以有数值,空值null表示这个变量代表的参数不存在(而不想用一个默认值0来表示)。 

在引入可为空的类型之后,我们会遇到比较的问题。这个需要特别留意的,如果int? a=null, int? b=3, 在你比较的大小的时候可能会与您的预期不一致。

int? a=null;
int? b=null;

//结果为true: 表示 null == null
if( a==b )
{
    Console.WriteLine("true“);
}
else
{
    Console.WriteLine("false“);
}

a=3;
//结果为false: 表示 3不大于 null
if( a > b ) 
{
    Console.WriteLine("true“);
}
else
{
    Console.WriteLine("false“);
}

//结果为false: 表示 3 也不小于 null
//其实数值和null之间是不可以比较的
if( a < b ) 
{
    Console.WriteLine("true“);
}
else
{
    Console.WriteLine("false“);
}

b=1;
//结果为true: 表示 3>1
if( a > b ) 
{
    Console.WriteLine("true“);
}
else
{
    Console.WriteLine("false“);
}

这时候你可能想到比较之前可以先检查一下是否为空null。

还有一种情况,比如我们想比较 a和100的大小,期望a=null或者a.Value<100时都能返回false, 当a.Value>=100时返回true,可以这样做

int? a = null;

//... ...
//其他计算和赋值
//... ...

//这个在a赋值了,且值大于100时返回true
if(!(a < null))
{
    Console.WriteLine("true");
}

 

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值