9

老路

int? myFavoriteNumber = 42;
int total = 0;
if (myfavoriteNumber.HasValue)
  total += myFavoriteNumber.Value *2;

新的方法?

int? myFavoriteNumber = 42; 
total += myFavoriteNumber?.Value *2; //fails 
4

4 回答 4

4

空传播运算符 ?。正如它所说,传播空值。在 int?.Value 的情况下,这是不可能的,因为 Value 的类型 int 不能为 null(如果可能,操作将变为null * 2,这意味着什么?)。所以“旧方式”仍然是目前的方式。

于 2016-03-13T12:58:50.280 回答
3

尝试这个:

int? myFavoriteNumber = 42; 
total += (myFavoriteNumber??0) *2; 

如果为空,则表达式 ( myFavoriteNumber?? 0) 返回 0 。myFavoriteNumber

于 2016-03-13T12:59:22.897 回答
3

我认为您误解了null条件运算符的使用。当其中一个步骤产生时,它用于将ifs链短路。nullnull

像这样:

userCompanyName = user?.Company?.Name;

请注意,userCompanyName将包含nullifuseruser.Companyis null。在你的例子total中不能接受null,所以更多的是关于使用 ?? 最重要的是:

total = (myFavoriteNumber ?? 0) * 2;
于 2016-03-13T13:00:00.117 回答
0

尝试这个

int? myFavoriteNumber = 42; 
total += (myFavoriteNumber.Value!=null)? myFavoriteNumber.Value*2 : 0;
于 2016-03-13T13:13:12.600 回答