Visual Studio为什么不对空引用异常发出警告?

问题描述 投票:0回答:1

我想知道为什么Visual Studio 2019不会抱怨这段C#代码:

dynamic deserializedBody = JsonConvert.DeserializeObject(requestBody);
deserializedBody?.date.ToString();

因为deserializedBody?.date可能是null,所以这意味着ToString方法将应用于null。我认为是这样的:

deserializedBody?.date?.ToString();

将是正确的使用形式,但Visual Studio不会抱怨第一个版本。当然,我确实缺少有关这段代码的本质的信息。

c# tostring nullable null-conditional-operator
1个回答
2
投票
完整示例:

using System; class Test { DateTime date = DateTime.UtcNow; static void Main() { Test t = null; // No exception thrown Console.WriteLine(t?.date.ToString()); } }

这里的表达式t?.date.ToString()等效于:

t is null ? null : t.date.ToString()

(除了t仅被评估一次)。

not等同于

(t is null ? null : t.date).ToString()

...这是我怀疑您期望它执行的操作。
但是不,此

不是

可以防止deserializedBody不为空,但deserializedBody.date为空。”>
© www.soinside.com 2019 - 2024. All rights reserved.