[英]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.