簡體   English   中英

C#轉換列表 <string> 列出 <TimeSpan>

[英]C# Convert List<string> to List<TimeSpan>

我已經看到了有關如何將string轉換為TimeSpan示例,這是一個示例:

如何將字符串“ 07:35”(HH:MM)轉換為TimeSpan

但是將List<string>轉換為List<TimeSpan>最有效方法是什么?

我已經嘗試了以下方法,但是沒有用:

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

在下面的代碼中,我有一個字符串列表(應該具有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();

這將處理無效的時間跨度字符串。

TryParse返回布爾值。 在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();

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM