“TimeSpan?” не содержит определения “TotalMinutes”

103
29 августа 2021, 17:40

Программа простая, прототип бэк-энда для киоска парковки. Надо посчитать время выезда машины с парковки, но почему-то при попытке подсчитать разницу в минутах с одним из полей выдаёт ошибку:

public bool TryLeaveParkingWithTicket(int ticketNumber, out ParkingSession session)
{
    session = ActiveParkingSessions[ticketNumber];
    double parkingTime;
    if(session.PaymentDt != null)
    {
        parkingTime = (DateTime.Now - session.PaymentDt).TotalMinutes;
    }
    else {
        parkingTime = (DateTime.Now - session.EntryDt).TotalMinutes;
    }
    if(parkingTime < freeLeavePeriod) {
        session.ExitDt = DateTime.Now;
        ActiveParkingSessions.Remove(session);
        PastParkingSessions.Add(session);
        return true;
    }
    else {
        session = null;
    }
    return false;
    throw new NotImplementedException();
}   

Текст ошибки: "TimeSpan?" не содержит определения "TotalMinutes", и не удалось найти доступный метод расширения "TotalMinutes", принимающий тип TimeSpan? в качестве первого аргумента (возможно пропущена директива using или ссылка на сборку). " ошибка в строке

parkingTime = (DateTime.Now - session.PaymentDt).TotalMinutes;

Сам класс сессии:

class ParkingSession
    {
        private DateTime entryDt;
        private DateTime? paymentDt;
        private DateTime? exitDt;
        private decimal? totalPayment;
        private string carPlateNumber;
        private int ticketNumber;

        // Date and time of arriving at the parking
        public DateTime EntryDt { 
            get { return entryDt; }
            set {
                this.entryDt = value;
            }
        }
        // Date and time of payment for the parking
        public DateTime? PaymentDt { 
            get { return paymentDt; }
            set {
                this.paymentDt = value;
            } 
        }
        // Date and time of exiting the parking
        public DateTime? ExitDt {
            get { return exitDt; }
            set { 
                this.exitDt = value;
            } 
        }
        // Total cost of parking
        public decimal? TotalPayment { 
            get { return totalPayment; }
            set{
                this.totalPayment = value;
            }
        }
        // Plate number of the visitor's car
        public string CarPlateNumber { 
            get { return carPlateNumber; }
            set{
                this.carPlateNumber = value;
            }
        }
        // Issued printed ticket
        public int TicketNumber { 
            get { return ticketNumber; } 
            set{
                this.ticketNumber = value;
            }
        }
        public ParkingSession(DateTime _EntryDt, string _CarPlateNumber, int _TicketNumber)
        {
            EntryDt = _EntryDt;
            TicketNumber = _TicketNumber;
            CarPlateNumber = _CarPlateNumber;
            TotalPayment = null;
            ExitDt = null;
            PaymentDt = null;
        }
    }
Answer 1

DateTime? PaymentDt - это nullable DateTime, в нем может лежать либо DateTime, либо null. Соответственно, при вычитании

DateTime.Now - session.PaymentDt

вы получаете nullable TimeSpan - в котором лежит или TimeSpan, или null.

Если вы точно знаете, что к этому моменту PaymentDt у вас не null - явно напишите в коде обращение именно к DateTime:

parkingTime = (DateTime.Now - session.PaymentDt.Value).TotalMinutes;

Если при этом оно может быть null при обычной работе - добавьте проверку на == null чуть выше и напишите код для случая, когда PaymentDt не задан.

READ ALSO
C# WPF вытащить компонент из xaml

C# WPF вытащить компонент из xaml

Есть некое окно с разметкой Mainxaml, и есть некий файл с отдельно свёрстанным элементом(пусть будет Button

95
Подсчитать количество записей за 2018 год SQL

Подсчитать количество записей за 2018 год SQL

Всем привет, столкнулся с маленькой проблемойЕсть связанные таблицы, данные из них я получил, но мне нужно посчитать записи за 2018 год

223
Как применить два тега к переменной в PHP?

Как применить два тега к переменной в PHP?

Нужно вывести данные массива (дни недели)Выходные - выделить жирным шрифтом, причем текущий день - выделить курсивом

109
docker build error

docker build error

Полистал первые 2 страницы в гугле с этой проблемой, ничего не помоглоЖдать 9 часов не вариант =(

308