【问题标题】:Cast IEnumerable<string> to IEnumerable<int> in C# [duplicate]在 C# 中将 IEnumerable<string> 转换为 IEnumerable<int> [重复]
【发布时间】:2018-04-15 03:47:03
【问题描述】:

我有:

IEnumerable<string> c = codigo_incidencia.Split('#');

我需要将“c”转换为IEnumerable&lt;int&gt;。我不知道如何在 C# 中执行此转换。

有人可以帮我吗?

【问题讨论】:

  • 你有没有尝试过?
  • 我不会cast这个,我更有可能在.Split()的返回值上调用.Select()并解析.Select()中的字符串。
  • 这不是强制转换,而是转换。当然,只有当您的 IEnumerable 可以转换为 IEnumerable 时,才会发生这种情况。 codigo_incidencia 的内容是什么?
  • 感谢@ChristianGollhardt 找到合适的副本。发布答案的FGITW没有那么快;他们应该使用近距离投票(甚至是dupehammer),但是没有

标签: c# .net visual-studio


【解决方案1】:

最短的方法是同样使用 linq .Select

var c = codigo_incidencia.Split('#').Select(int.Parse);

如果您不确定这些部分是否为有效整数,那么您可能希望使用TryParse,如:Select parsed int, if string was parseable to int。如果使用 C# 7.0,您可以查看问题的this answer

var result = codigo_incidencia.Split('#')
                 .Select(s => new { Success = int.TryParse(s, out var value), value })
                 .Where(pair => pair.Success)
                 .Select(pair => pair.value);

【讨论】:

    【解决方案2】:

    使用 LINQ:

    IEnumerable<int> c = codigo_incidencia.Split('#').Select(x => int.Parse(x));
    

    【讨论】:

      【解决方案3】:

      如果字符串总是保证是数字,你可以这样做:

      IEnumerable<int> c = codigo_incidencia.Split('#').Select(stringValue => int.Parse(stringValue));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-11
        • 2018-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多