使用空值列出C#中的转换

时间:2013-06-17 17:42:01

标签: c# list type-conversion

我有一个列表,其中包含存储在List<string>

中的数值

数据可能包含一些空值。

如何将List<string>转换为List<double?>? 这是我的代码:

List<double > d2 = d1.ConvertAll(item => double.Parse(item));

3 个答案:

答案 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();