C# 将列表<string> 转换为列表<TimeSpan>
C# Convert List<string> to 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();
应该做的工作:
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);
TryParse
returns 布尔值。在 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();
在下面的代码中,我有一个字符串列表(应该有 Timespan
字符串,但它可以包含任何字符串)
所以首先我检查条件是否通过 TryParse
然后我才将特定字符串转换为 Timespan
并将其添加到 Timespan
[=15 的列表中=]
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();
这将处理无效的时间跨度字符串。
我会使用 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();
我看过如何将 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();
应该做的工作:
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);
TryParse
returns 布尔值。在 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();
在下面的代码中,我有一个字符串列表(应该有 Timespan
字符串,但它可以包含任何字符串)
所以首先我检查条件是否通过 TryParse
然后我才将特定字符串转换为 Timespan
并将其添加到 Timespan
[=15 的列表中=]
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();
这将处理无效的时间跨度字符串。
我会使用 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();