C # конвертировать список <string>в список <TimeSpan> - PullRequest
0 голосов
/ 24 мая 2018

Я видел примеры того, как преобразовать string в TimeSpan, вот один пример:

Как преобразовать строку "07:35" (ЧЧ: ММ)в TimeSpan

Но каков самый эффективный способ преобразования List<string> в List<TimeSpan>?

Я пробовал что-то в этом роде,но не работает:

var result = new TimeSpan;

var appointmentStartTimesConverted = appointmentStartTimes
  .Select(i => result = TimeSpan.TryParse(i, out result))
  .ToList();

Ответы [ 5 ]

0 голосов
/ 24 мая 2018

Я бы написал что-нибудь с использованием Linq, но с промежуточной функцией, например:

        List<string> lst = new List<string>() { "7:35", "3:45", "0:23" };

        Func<string, TimeSpan> GetTS = (str) =>
        {
            TimeSpan.TryParse(str, out TimeSpan ts);
            return ts;
        };

        var tsLst = lst.Select(r => GetTS(r)).ToList();
0 голосов
/ 24 мая 2018

в приведенном ниже коде, у меня есть список строки (которая должна содержать Timespan строку, но может содержать любую строку)

, поэтому сначала я проверяю условие, если оно проходитTryParse и только тогда я конвертирую определенную строку в Timespan и добавляю ее в список Timespan

List<string> str = new List<string>();
str.Add("07:30");
str.Add("amit");
TimeSpan res = new TimeSpan();
List<TimeSpan> ts = str.Where(x => TimeSpan.TryParse(x, out res) != false).Select(y => res).ToList();

Это позаботится о недопустимой строке промежутка времени.

0 голосов
/ 24 мая 2018

Нет решения Linq - достаточно простого цикла :

 List<TimeSpan> result = new List<TimeSpan>(appointmentStartTimes.Count);

 foreach (var item in appointmentStartTime)
   if (TimeSpan.TryParse(item, out var span)) // out var - C# 7.0 feature
     result.Add(span);
0 голосов
/ 24 мая 2018

TryParse возвращает bool.Используйте Parse в блоке try / catch, чтобы убедиться, что все значения будут обработаны, или используйте выходной параметр из TryParse.Нет необходимости объявлять локальную переменную result.

var appointmentStartTimes = new List<string>();
//fill values here 

var appointmentStartTimesConverted = appointmentStartTimes
    .Select(i =>
        {
            try
            {
                return TimeSpan.Parse(i);
            }
            catch
            {
                return default(TimeSpan);
            }
        }
    ).ToList();

//anothey way
appointmentStartTimesConverted = appointmentStartTimes
    .Select(i =>
        {
            if (TimeSpan.TryParse(i, out var result))
                return result;

            return default(TimeSpan);
        }
    ).ToList();
0 голосов
/ 24 мая 2018

Должен делать работу:

 var appointmentStartTimes = new List<string>{"7:45", "0:0","a"};

 var appointmentStartTimesConverted = appointmentStartTimes
   .Select(i =>
            {
                TimeSpan result;
                if(TimeSpan.TryParse(i, out result))
                    return new Nullable<TimeSpan>(result);          
                return null;        
            })
   .Where(x => x.HasValue)
   .ToList();
...