gpt4 book ai didi

C# 自动属性 ​​- += 后仍然为空?

转载 作者:可可西里 更新时间:2023-11-01 09:16:50 24 4
gpt4 key购买 nike

这对我来说似乎是一个错误...

我接受这样定义的自动属性:

public decimal? Total { get; set; }

首次访问时将为空。它们还没有被初始化,所以它们当然是空的。

但是,即使通过+=设置了它们的值,这个小数点呢?仍然为空。所以之后:

Total += 8;

总计仍为空。这怎么可能是正确的?我知道它正在执行 (null + 8),但奇怪的是它没有接收到这意味着它应该只设置为 8...

附录:

我在我的问题中提出了“null + 8”点 - 但请注意它适用于字符串。所以,它执行 null + "hello"就好了,并返回 "hello"。因此,在幕后,它正在将字符串初始化为值为“hello”的字符串对象。对于其他类型,IMO,行为应该相同。这可能是因为字符串可以接受 null 作为值,但 null 字符串仍然不是初始化对象,对吗?

也许这只是因为字符串不可为空...

最佳答案

public decimal? Total { get; set; }

null 视为“未知值”。如果您有一个未知数量的东西,然后再添加 8 个,那么您现在有多少个?

答案:未知。

可空变量的操作

情况下,对未知值的操作会产生可知结果。

public bool? State { get; set; }

以下语句具有已知解决方案,即使它们包含未知值:

State = null;
nextState = State & false; // always equals false
nextState = State & true; // still unknown (null)

nextState = State | true; // always true
nextState = State | false; // still unknown (null)

看到模式了吗?

当然,如果你希望Total在为null时等价(等于)0,可以使用null 合并运算符 并编写如下内容:

Total = (Total ?? 0) + 8;

这将在您的等式中使用 Total 的值除非它是null,在这种情况下它将使用值 0。

关于C# 自动属性 ​​- += 后仍然为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1335287/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com