Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C将列表转换为列表_C#_List_Timespan - Fatal编程技术网

C# C将列表转换为列表

C# C将列表转换为列表,c#,list,timespan,C#,List,Timespan,我看过如何将字符串转换为时间跨度的示例,下面是一个示例: 但是,将列表转换为列表的最有效方法是什么 我已经尝试过类似的方法,但不起作用: var result = new TimeSpan; var appointmentStartTimesConverted = appointmentStartTimes .Select(i => result = TimeSpan.TryParse(i, out result)) .ToList(); 我们应该做这项工作: var app

我看过如何将字符串转换为时间跨度的示例,下面是一个示例:

但是,将列表转换为列表的最有效方法是什么

我已经尝试过类似的方法,但不起作用:

var result = new TimeSpan;

var appointmentStartTimesConverted = appointmentStartTimes
  .Select(i => result = TimeSpan.TryParse(i, out result))
  .ToList();
我们应该做这项工作:

 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();
没有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);
特里帕斯返回布尔。在try/catch块中使用Parse以确保处理所有值,或者使用TryParse的输出参数 不需要声明局部变量结果


在下面的代码中,我有一个字符串列表,它应该有Timespan字符串,但它可以容纳任何字符串

所以首先我要检查条件是否通过了TryParse,然后我才将特定字符串转换为Timespan,并将其添加到Timespan列表中


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

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

特里帕斯返回一个布尔。我认为使用{result=xx;return result;}不要使用LINQ.@M.kazemAkhgary对你的答案进行投票,因为基于意见的^^TryParse会返回bool。不能在TimeSpan中添加布尔值。通过这样做result=TimeSpan.TryParsei,out result我认为不应该关闭它。这不是基于意见的。@M.kazemAkhgary Good spot。。但是TryParse不会返回可为null的。。修正了=defaultTimeSpan条件可能是危险的。如果我们有0:0字符串要转换呢?@DmitryBychenko第三次咒语?x=>x.HasValue很好,没有副作用:要实际获得时间戳而不是时间戳,请将.Wherex=>x.HasValue替换为.OfTypethis不好。你得到了默认值,你不知道默认值是合法的结果还是失败。是的,你完全正确。起初,我认为TimeSpan TryParse在出现故障时会给出一个空值。我认为这不是真的。谢谢,@M.kazemakhgary这个答案是op最有效的强调。也就是说,括号的双重缺失让我感觉赤裸。
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();
        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();