C#条件运算符的返回类型

Shr*_*roy 2 c# entity-framework nullable

我有一个名为EmailMessage的对象,它有一个可以为空的System.DateTime字段,名为Timestamp.在我的C#代码中,我有以下几行:

var TS = EmailMessage.Timestamp == null ? System.DateTime.Now : EmailMessage.Timestamp;
Run Code Online (Sandbox Code Playgroud)

为什么.NET 4推断TS的数据类型是System.DateTime?而不是System.DateTime(换句话说,为什么.NET 4认为TS可以为空?)对我而言,TS显然是不可空的.

在此先感谢您的帮助.

xan*_*tos 5

因为C#编译器只是着眼于类型DateTime.NowEmailMessage.Timestamp:-)

我会告诉你一件事:我可以打破你的假设.假设有两个主题.一个线程有你的代码,另一个线程有EmailMessage.Timestamp = null.另一个线程在EmailMessage.Timestamp == null和之间执行TS = EmailMessage.Timestamp.休息:-)

我将补充一点,你的代码通常是这样编写的:

var TS = EmailMessage.Timestamp ?? System.DateTime.Now;
Run Code Online (Sandbox Code Playgroud)

使用?? 运算符这样编译器知道它TS不可为空.