Операнд никогда не пустое предупреждение

Я пишу некоторую логику, которая получит дату начала для объекта, если он не равен нулю или получит минимальное значение.

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

Решарпер генерирует предупреждение о том, что операнд никогда не является нулевым:

введите описание изображения здесь

Если предыдущая категория в сценарии имеет значение null, как это может привести к тому, что левый операнд не будет иметь значение null, или это просто ошибка в 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();

1 ответ

Если вы запускаете свой тестовый объект:

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...) в списке, который может иметь нулевой результат, вы можете использовать свой код без предупреждения.

введите описание изображения здесь

Обновление: во втором сенарио Решарпер делает ошибку, потому что:

var check = ((DateTime?) tmp?.startDate).HasValue;// false , startDate is null
Другие вопросы по тегам