我有一个列表,其中包含存储在List<string>
。
数据可能包含一些空值。
如何将List<string>
转换为List<double?>
?
这是我的代码:
List<double > d2 = d1.ConvertAll(item => double.Parse(item));
答案 0 :(得分:1)
您没有指定如何处理非null
但无法解析的输入。我为您提供三种解决方案。
对于无法解析为null
的所有null
输入和string
,第一个解决方案返回double
。
var values =
list.Select(
s => {
double value;
if(!Double.TryParse(s, out value)) {
return (double?)null;
}
return value;
}
).ToList();
请注意,这将为null
输入返回null
,而string
的{{1}}将不会解析为double
。
如果您有任何string
非空且无法解析,第二个解决方案将会爆炸:
var values = list.Select(s => s != null ? double.Parse(s) : (double?)null)
.ToList();
再次注意,如果您遇到任何未解析为null
的非string
double
,则抛出异常。
第三种可能性是忽略无法解析为string
的非空double
。
var values =
list.Select(
s => {
double value;
if(s == null) {
return new { Parseable = true, Value = (double?)null) };
}
else if(!Double.TryParse(s, out value)) {
return new { Parseable = false, Value = (double?)null) };
}
else {
return new { Parseable = true, Value = value };
}
)
.Where(x => x.Parseable)
.Select(x => x.Value)
.ToList();
我实际上强烈建议不要这样做。默默地忽略错误是一个巨大的错误来源。
答案 1 :(得分:1)
试试这个:
var result = yourlist.Select(x=> string.IsNullOrEmpty(x) ? (double?)null : Convert.ToDouble(x)).ToList();
答案 2 :(得分:0)
List<double?> result = myList.Select(n => n == null ? (double?)null : double.Parse(n)).ToList();