C#将List <string>转换为List <timespan>

时间:2018-05-24 08:45:12

标签: c# list timespan

我已经看到了如何将string转换为TimeSpan的示例,以下是一个示例:

How to Convert string "07:35" (HH:MM) to TimeSpan

但将List<string>转换为List<TimeSpan>最有效方式是什么?

我已经尝试过这些方面的东西,但是没有工作:

var result = new TimeSpan;

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

5 个答案:

答案 0 :(得分:5)

应该做的工作:

 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();

答案 1 :(得分:4)

No 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);

答案 2 :(得分:1)

在下面的代码中,我有一个字符串列表(应该有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();

这将处理无效的时间跨度字符串。

答案 3 :(得分:0)

TryParse返回bool。在try / catch块中使用Parse以确保将处理所有值或使用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();

答案 4 :(得分:0)

我使用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();