C# 在LINQ中使用可为空的DateTime时可能出现InvalidOperationException

C# 在LINQ中使用可为空的DateTime时可能出现InvalidOperationException,c#,linq,C#,Linq,我有一些变量定义如下: DateTime? tempDateTime; var recordWithMinDatetime = locatedContracts.Where(t => t.OriginalDate.HasValue) .OrderBy(t => t.OriginalDate.Value) .FirstOrDefault(); if (recordWithMinDatetime != null) temp

我有一些变量定义如下:

DateTime? tempDateTime;
var recordWithMinDatetime =
    locatedContracts.Where(t => t.OriginalDate.HasValue)
        .OrderBy(t => t.OriginalDate.Value)
        .FirstOrDefault();
    if (recordWithMinDatetime != null)
        tempDateTime = recordWithMinDatetime.OriginalDate.Value;
if (recordWithMinDatetime != null && recordWithMinDatetime.OriginalDate.HasValue)
    tempDateTime = recordWithMinDatetime.OriginalDate.Value;
我还有一个类似这样的问题:

DateTime? tempDateTime;
var recordWithMinDatetime =
    locatedContracts.Where(t => t.OriginalDate.HasValue)
        .OrderBy(t => t.OriginalDate.Value)
        .FirstOrDefault();
    if (recordWithMinDatetime != null)
        tempDateTime = recordWithMinDatetime.OriginalDate.Value;
if (recordWithMinDatetime != null && recordWithMinDatetime.OriginalDate.HasValue)
    tempDateTime = recordWithMinDatetime.OriginalDate.Value;
但是在
IDE
中,当我将鼠标悬停在上一个作业上时,它会显示“可能的无效操作异常”

我也安装了
ReSharper
,所以不确定它是来自R#还是VS IDE,但我还是应该关注一些事情,我想,但我不明白我做错了什么或是不安全的代码给了我这个提示

这可能是个错误。我会忽略它。通过在LINQ查询中选中
HasValue
,可以确保
OriginalDate.Value
不会引发异常

R#试图提供帮助,并且可能希望得到如下检查:

DateTime? tempDateTime;
var recordWithMinDatetime =
    locatedContracts.Where(t => t.OriginalDate.HasValue)
        .OrderBy(t => t.OriginalDate.Value)
        .FirstOrDefault();
    if (recordWithMinDatetime != null)
        tempDateTime = recordWithMinDatetime.OriginalDate.Value;
if (recordWithMinDatetime != null && recordWithMinDatetime.OriginalDate.HasValue)
    tempDateTime = recordWithMinDatetime.OriginalDate.Value;
但在您的情况下,此检查是多余的。

这可能是一个R#错误。我会忽略它。通过在LINQ查询中选中
HasValue
,可以确保
OriginalDate.Value
不会引发异常

R#试图提供帮助,并且可能希望得到如下检查:

DateTime? tempDateTime;
var recordWithMinDatetime =
    locatedContracts.Where(t => t.OriginalDate.HasValue)
        .OrderBy(t => t.OriginalDate.Value)
        .FirstOrDefault();
    if (recordWithMinDatetime != null)
        tempDateTime = recordWithMinDatetime.OriginalDate.Value;
if (recordWithMinDatetime != null && recordWithMinDatetime.OriginalDate.HasValue)
    tempDateTime = recordWithMinDatetime.OriginalDate.Value;

但在您的情况下,此检查是多余的。

Resharper可能无法确定OriginalDate在查询中是否已检查为空。告诉Resharper忽略这一点应该是安全的(“使用注释禁用”)。Resharper可能无法确定OriginalDate在查询中是否已检查为空。告诉Resharper忽略这一点应该是安全的(“用注释禁用”)。