【问题标题】:How to convert a string into Int collection [duplicate]如何将字符串转换为 Int 集合 [重复]
【发布时间】:2017-06-06 22:55:31
【问题描述】:

下面是我的字符串。

var str = "1,2,3,4,5";

var strArr = str.split(","); // this gives me an array of type string

List<int> intCol = new List<int>(); //I want integer collection. Like

我正在做的是:-

foreach(var v in strArr)
{
     intCol.add(Convert.ToInt(v));
}

这是正确的做法吗?

【问题讨论】:

  • @sakbari:那个副本不是很接近,它不是关于 , 分隔列表。

标签: c# asp.net string generics collections


【解决方案1】:
var numbers = str.Split(',').Select(x => int.Parse(x)).ToList();

但在这种情况下,我会添加一些错误处理,以防项目无法像这样转换为整数:

var strArr = str.Split(',')
    .Select(x =>
    {
        int num;
        if (int.TryParse(x, out num))
        {
            return num;
        }

        // Parse failed so return -1 or some other value or log it
        // or throw exception but then this whole operation will fail
        // so it is upto you and your needs to decide what to do in such
        // a case.
        return -1; 
    });

注意:如果值无法转换,Convert.ToInt() 将抛出 FormatExceptionTryParse 不会。

【讨论】:

  • 明白你的意思。问题是您正在使用 FluentApi,但间接地您正在做与我使用 foreach 循环所做的相同的事情。对吧??
【解决方案2】:

嗯,这确实是一种的方法——但是 LINQ 让它变得容易多了,因为这正是它的设计目的。您需要一个管道:

  • 将原始字符串拆分为子字符串
  • 将每个字符串转换为整数
  • 将结果序列转换为列表

这很简单:

List<int> integers = bigString.Split(',').Select(int.Parse).ToList();

在这里使用int.Parse 作为方法组很干净,但是如果您更习惯使用 lambda 表达式,则可以使用

List<int> integers = bigString.Split(',').Select(s => int.Parse(s)).ToList();

【讨论】:

    猜你喜欢
    • 2015-06-02
    • 2015-06-18
    • 2017-05-07
    • 1970-01-01
    • 2020-07-27
    • 2012-01-24
    • 2013-11-04
    • 2021-12-25
    • 2016-07-07
    相关资源
    最近更新 更多