【问题标题】:List Conversion in C# with null valuesC# 中具有空值的列表转换
【发布时间】:2013-06-13 18:18:02
【问题描述】:

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

数据可能包含一些空值。

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

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

【问题讨论】:

  • 到目前为止你有没有尝试过?你知道如何转换单个项目吗?如果是这样,一般算法是创建一个新列表,转换每个项目,然后将该转换添加到新列表中。
  • 这是我迄今为止尝试过的:List d2 = d1.ConvertAll(item => double.Parse(item));
  • 您对该解决方案有什么问题?您目前如何处理目前无法转换的项目?
  • 我们有一个连续投票者。恭喜!
  • @SonerGönül 我很高兴有人比我快,否则我会被否决。

标签: c# list type-conversion


【解决方案1】:

试试这个:

var result = yourlist.Select(x=> string.IsNullOrEmpty(x) ? (double?)null : Convert.ToDouble(x)).ToList();

【讨论】:

  • 当心,如果有任何非空输入未解析,这将抛出。
【解决方案2】:

您没有指定要如何处理不是null 但无法解析的输入。我为您提供三种解决方案。

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

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

请注意,对于null 输入,这将返回null 和 对于不解析为doubles 的strings。

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

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

再次注意,如果您遇到任何不解析为double 的非null strings,这将抛出异常。

第三种可能性是省略无法解析为double 的非空string。

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

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

【讨论】:

  • 也不是他想要的。
  • 他问:如果字符串为null返回null,否则解析字符串。
  • @newStackExchangeInstance:他确实没有指定他想用不解析的非空string做什么。
  • 他做了,但你没有检查空值。
  • 我不需要检查null。 Double.TryParse 将为null 输入返回false,它将分支到if 正文并返回(double?)null,完全符合他的要求。
【解决方案3】:
List<double?> result = myList.Select(n => n == null ? (double?)null : double.Parse(n)).ToList();

【讨论】:

  • 尝试编译解决方案,自己看看。
猜你喜欢
  • 2019-07-25
  • 1970-01-01
  • 1970-01-01
  • 2019-07-24
  • 2014-06-23
  • 2021-07-01
  • 1970-01-01
  • 2021-11-23
  • 2013-10-27
相关资源
最近更新 更多