0

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

数据可能包含一些空值。

我怎样才能转换List<string>List<double?>?这是我的代码:

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

3 回答 3

1

您没有指定要如何处理不是null但无法解析的输入。我给你三个解决方案。

第一个解决方案返回null所有无法解析为的null输入和s 。stringdouble

var values =
    list.Select(
        s => {
            double value; 
            if(!Double.TryParse(s, out value)) {
                return (double?)null;
            }
            return value;
        }
    ).ToList();

请注意,这将返回null输入不解析为nulls的s。stringdouble

string如果您有任何非空且无法解析的 s ,则第二种解决方案将爆炸:

var values = list.Select(s => s != null ? double.Parse(s) : (double?)null)
                 .ToList();

同样,请注意,如果您遇到任何不解析为的非 s,这将引发异常。null stringdouble

第三种可能性是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();

我实际上强烈建议不要这样做。默默地忽略错误是错误的巨大来源。

于 2013-06-17T17:44:34.280 回答
1

试试这个:

var result = yourlist.Select(x=> string.IsNullOrEmpty(x) ? (double?)null : Convert.ToDouble(x)).ToList();
于 2013-06-17T17:45:23.597 回答
0
List<double?> result = myList.Select(n => n == null ? (double?)null : double.Parse(n)).ToList();
于 2013-06-17T17:44:56.450 回答