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
无效传播算子?就像它说的那样,传播null值。在int?.Value的情况下,这是不可能的,因为Value的类型int不能为null(如果可能,操作将变为null * 2
,这意味着什么?)。因此,'老路'仍然是目前这样做的方式。
_什么意思?_就像旁边一样,通常任何乘以NULL的数字都会返回NULL。例如,这就是普通SQL的工作原理。 NULL通常意味着“我不知道价值”。想象一下这个例子:我为每个苹果的NULL $ 5乘以5个苹果。所以我不知道苹果的成本。结果是_I不知道总成本,所以结果是NULL。 –
尝试这种情况:
int? myFavoriteNumber = 42;
total += (myFavoriteNumber??0) *2;
表达式(myFavoriteNumber?? 0
)中的myFavoriteNumber
为空的情况下返回0。
我想你误解了使用null
有条件的操作符。 它用于短路ifs到null
的链,当其中一个步骤产生null
时。
像这样:
userCompanyName = user?.Company?.Name;
请注意,userCompanyName
将包含null
如果user
或user.Company
是null
。 在你的例子total
不能接受null
,所以它更多的是使用?比什么都重要:
total = (myFavoriteNumber ?? 0) * 2;
试试这个
int? myFavoriteNumber = 42;
total += (myFavoriteNumber.Value!=null)? myFavoriteNumber.Value*2 : 0;
出了什么问题'INT总=(myfavoriteNumber.HasValue)? myFavoriteNumber.Value * 2:0;'?仍然是一条线,并且比你建议的“新方法”更具可读性 –
@ShadowWizard我假设他可能想多次使用这个函数,因此使用+ =以便他可以保持运行总数?我只是猜测。我同意你的意见,我仍然喜欢你的评论。 –
@PrimeByDesign我会用'??',如[this](https://stackoverflow.com/a/35970536/111794)回答。 –