老路
int? myFavoriteNumber = 42;
int total = 0;
if (myfavoriteNumber.HasValue)
total += myFavoriteNumber.Value *2;
新的方法?
int? myFavoriteNumber = 42;
total += myFavoriteNumber?.Value *2; //fails
老路
int? myFavoriteNumber = 42;
int total = 0;
if (myfavoriteNumber.HasValue)
total += myFavoriteNumber.Value *2;
新的方法?
int? myFavoriteNumber = 42;
total += myFavoriteNumber?.Value *2; //fails
空传播运算符 ?。正如它所说,传播空值。在 int?.Value 的情况下,这是不可能的,因为 Value 的类型 int 不能为 null(如果可能,操作将变为null * 2
,这意味着什么?)。所以“旧方式”仍然是目前的方式。
尝试这个:
int? myFavoriteNumber = 42;
total += (myFavoriteNumber??0) *2;
如果为空,则表达式 ( myFavoriteNumber?? 0
) 返回 0 。myFavoriteNumber
我认为您误解了null
条件运算符的使用。当其中一个步骤产生时,它用于将ifs链短路。null
null
像这样:
userCompanyName = user?.Company?.Name;
请注意,userCompanyName
将包含null
ifuser
或user.Company
is null
。在你的例子total
中不能接受null
,所以更多的是关于使用 ?? 最重要的是:
total = (myFavoriteNumber ?? 0) * 2;
尝试这个
int? myFavoriteNumber = 42;
total += (myFavoriteNumber.Value!=null)? myFavoriteNumber.Value*2 : 0;