C#: Как манипулировать значениями элементов в Списке <t> - PullRequest
0 голосов
/ 23 апреля 2020

Я использую два списка. Одним из них является то, что в списке записаны команды, параметры и время. другой такой же, как и первый. Однако я добавлю временной интервал между двумя последовательными командами. У меня проблема с перемещением значения в другой список. Также я не знаю, почему я не могу использовать метод ToString при сохранении значения временного интервала. Я мог видеть исключение вне диапазона.

 public class log
 {
     [XmlElement("command")]
     public int command { get; set; }
     [XmlElement("param")]
     public int param { get; set;}
     [XmlElement("time")]
     public string time { get; set; }
 }

List<log> logs_temp = new List<log>(1);
List<log> logs = new List<log>(logs_temp.Count);

log log_0 = new log();

log_0.command = 1;
log_0.param = 0;
log_0.time = DateTime.Now.ToString("HH:mm:ss");

logs_temp.Add(log_0);

// I got a out of range exception
for (int i = 0; i <=logs_temp.Count-1; i++)
{
     logs[i].param = logs_temp[i].command;
     logs[i].param = logs_temp[i].param;

     //Get a timespan between two sequencial command log

    TimeSpan time = new TimeSpan();
    TimeSpan timespan = DateTime.Parse(logs_temp[i + 1].time).Subtract(DateTime.Parse(logs_temp[i].time));

    //add second value as string but cannot
    logs[i].time = timespan.ToString(@"ss"); 
}

1 Ответ

1 голос
/ 23 апреля 2020

Вы должны гарантировать, что оба списка имеют одинаковый размер для запуска oop таким образом. И если вы используете значения из следующей позиции (i + 1), вы должны проверить, существует ли она. как то так:

List<log> logs_temp = new List<log>();
List<log> logs = new List<log>();
log log_0 = new log();
log_0.command = 1;
log_0.param = 0;
log_0.time = DateTime.Now.ToString("HH:mm:ss");
logs_temp.Add(log_0);
logs.Add(new log());

for (int i = 0; i <= logs_temp.Count-1; i++)
{
    logs[i].param = logs_temp[i].command;
    logs[i].param = logs_temp[i].param;

    //Get a timespan between two sequencial command log
    if (i + 1 < logs_temp.Count)
    {
        TimeSpan time = new TimeSpan();
        TimeSpan timespan = DateTime.Parse(logs_temp[i + 1].time).Subtract(DateTime.Parse(logs_temp[i].time));

        //add second value as string but cannot
        logs[i].time = timespan.TotalSeconds.ToString(); 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...