问题 在c#resharper建议的“条件访问”中,null给了我什么?


我使用Resharper来帮助语言功能,我有一个可以为空的DateTime字段。 Resharper建议使用以下语法:

 TodayDate = paidDate?.ToString("d"),

它看起来像一个标准的表达,但我没有得到一个问号。我得到两个问号,我得到冒号。

一个解释将不胜感激。当paidDate为空时会发生什么?


4489
2017-08-24 15:46


起源

codeproject.com/Tips/900017/... - Tim Schmelter
它是一个C#6特性,它不会在C#5中建议,基本上如果它返回null paidDate 为null,否则运行 .ToString 在上面。它的内联检查为null,否则在C#5中你需要检查 paidDate 在你可以打电话之前有一个值 .ToString 在上面。 - Ron Beyer


答案:


?. 是一个在C#中引入的新功能,它被称为 空条件运算符。它仅在何时评估方法调用 paidDate 不为null,并返回 null 代替。

它几乎相当于

TodayDate = paidDate == null ? null : paidDate.ToString("d");

如果您尝试调用返回值类型的方法 ?. 它将使整个事物回归 Nullable<T> 该值类型,例如

var myValue = paidDate?.Day;

将使 myValue 打字为 Nullable<int>


15
2017-08-24 15:49