C# 为什么我不能在MVC中将coalesce与TempData属性一起使用

C# 为什么我不能在MVC中将coalesce与TempData属性一起使用,c#,asp.net-mvc,C#,Asp.net Mvc,在以下代码中,发票将始终为空。无论TempData是否包含该信息 var invoices = TempData["invoices"] as List<Invoice> ?? new List<Invoice>(); var invoices=TempData[“发票”]作为列表??新列表(); 相反,必须做到以下几点: var invoices = TempData["invoices"] as List<Invoice>; invoices = in

在以下代码中,
发票
将始终为空。无论
TempData
是否包含该信息

var invoices = TempData["invoices"] as List<Invoice> ?? new List<Invoice>();
var invoices=TempData[“发票”]作为列表??新列表();
相反,必须做到以下几点:

var invoices = TempData["invoices"] as List<Invoice>;
invoices = invoices ?? new List<Invoice>();
var invoices=TempData[“invoices”]作为列表;
发票=发票??新列表();
有人能解释为什么吗?我喜欢
操作符,我想知道它是否安全使用

编辑:我在上面给出了一组简单的代码,显示了我的问题。这是因为它比我的静态变量和类更容易阅读,其他任何人都看不懂。因为我得到了接近票数的选票,显然我所看到的是不可能的,所以我发布了一个截图。在快照中,您可以看到,由于合并,变量作业永远不会为null。但是,在带有断点的代码行命中之后,它实际上是空的。此外,在下面的观察中,您可以看到TempData对象不是null,因此实际上不需要合并


我不太确定您的问题,但您的问题中的两个代码片段之间没有区别??好吧,试试看。应该没有代码差异,但我向你保证有。这就是我写这篇文章的原因。我刚刚写了,它运行良好,没有编译器错误,甚至没有来自Re SharperI的警告。我更新了我的问题并发布了一张图片。我同意你的看法,应该是这样的。我不需要修理它,因为我有一个解决办法;我只是想弄明白为什么它现在真的是空的。这很奇怪,请尝试重新启动Visual studio/IIS/计算机,看看这个问题是否消失了。还可以尝试重建、清理/重建,看看是否开始正常运行。