Операнд никогда не пустое предупреждение
Я пишу некоторую логику, которая получит дату начала для объекта, если он не равен нулю или получит минимальное значение.
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