2

我正在编写一些逻辑,如果它不为空,它将获得对象的开始日期,否则它将获得最小值。

var statusStartDate = ((DateTime?)previousCategory?.StartDate) ?? DateTime.MinValue;

Resharper 正在生成操作数永远不会为空的警告:

在此处输入图像描述

如果场景中的前一个类别为空,这将如何不创建一个左手操作数为空,或者这只是 resharper 中的一个错误?

编辑

DateTime 的可验证示例

    public class Test
    {
        public Date2 startDate;

        public List<Test> testList = new List<Test>();

        public struct Date2
        {
            public static explicit operator Date2(DateTime date)
            {
                return default(Date2);
            }

            public static explicit operator DateTime(Date2 date)
            {
                return default(DateTime);
            }
        }


        public DateTime BS()
        {
            var tmp = testList.LastOrDefault();
            var testDate = ((DateTime?)tmp?.startDate) ?? DateTime.MaxValue;
            return testDate;
        }
    }

var test = new Test();
test.BS();
var x = test.BS();
4

1 回答 1

0

如果您运行测试对象:

public class Test
{
    public DateTime startDate;
}

void main()
{
 var t = new test();
var time=t.startDate
}

时间变量不为空并且具有“{1/1/0001 12:00:00 }”值,这是 resharper 发出警告的原因。在某些情况下,例如列表上的 FirstOrDefault(x=>x...),可能有空结果,您可以使用您的代码而不会发出任何警告

在此处输入图像描述

更新:在第二个场景中,Resharper 犯了错误,因为:

var check = ((DateTime?) tmp?.startDate).HasValue;// false , startDate is null
于 2016-12-23T18:09:22.727 回答