如何将逗号分隔的字符串转换为List <int> </int>

时间:2012-02-15 20:58:38

标签: c# .net string list

string tags = "9,3,12,43,2"

List<int> TagIds = tags.Split(',');

这不起作用,因为split方法返回一个字符串[]

请帮忙。

12 个答案:

答案 0 :(得分:380)

这是一种方法:

List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();

答案 1 :(得分:19)

如果你想包含一些简单的验证并跳过无效的值(而不是抛出异常),这里有一些使用TryParse的东西:

string csv = "1,2,3,4,a,5";
int mos = 0;
var intList = csv.Split(',')
                    .Select(m => { int.TryParse(m, out mos); return mos; })
                    .Where(m => m != 0)
                    .ToList();

//returns a list with integers: 1, 2, 3, 4, 5

编辑:以下是基于Antoine反馈的更新查询。它首先调用TryParse来过滤掉任何坏的值,然后Parse来进行实际的转换。

string csv = "1,2,3,4,a,5,0,3,r,5";
int mos = 0;
var intList = csv.Split(',')
                    .Where(m => int.TryParse(m, out mos))
                    .Select(m => int.Parse(m))
                    .ToList();

//returns a list with integers: 1, 2, 3, 4, 5, 0, 3, 5

答案 2 :(得分:14)

您可以使用LINQ w / int.Parse()string[]转换为IEnumerable<int>,然后将该结果传递给List<T>构造函数:

var tagIds = new List<int>(tags.Split(',').Select(s => int.Parse(s)));

答案 3 :(得分:7)

一点LINQ有很长的路要走:

 List<int> TagIds = tags.Split(',')
         .Select(t => int.Parse(t))
         .ToList();

答案 4 :(得分:5)

如果没有LINQ查询,您可以选择此方法,

string tags = "9,3,12,43,2";
List<string> numbers = nos.Split(',').ToList<string>();

然后您可以将此List转换为整数类型...

答案 5 :(得分:4)

string tags = "9,3,12,43,2"

List<int> TagIds = tags.Split(',').Select(x => x.Trim()).Select(x=> Int32.Parse(x)).ToList();

答案 6 :(得分:2)

如果您使用的是C#3.5,可以使用Linq实现此目的

string tags = "9,3,12,43,2";
List<int> tagIds = tags.Split(',').Select(s=>int.Parse(s)).ToList();

或短篇

string tags = "9,3,12,43,2";
List<int> tagIds = tags.Split(',').Select(int.Parse).ToList();

答案 7 :(得分:2)

string tags = "9,3,12,43,2";
List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();

答案 8 :(得分:1)

我对khalid13的回答做了修改。如果用户输入一个&#34; 0&#34;字符串,他的答案将从结果列表中删除。我做了类似的事情,但使用了一个匿名对象。

{{1}}

TrimNullProtection是我做的一个自定义函数,可以在字符串为空时保护它。

以上操作是删除任何无法转换且无错误的字符串。如果转换出现问题则需要输入错误,那么接受的答案应该可以解决问题。

答案 9 :(得分:1)

我偶然发现了这一点,我只是想在没有linq的情况下分享我自己的解决方案。这是一种原始方法。非整数值也不会在列表中添加。

List<int> TagIds = new List<int>();
string[] split = tags.Split(',');
foreach (string item in split)
{
    int val = 0;
    if (int.TryParse(item, out val) == true)
    {
        TagIds.Add(val);
    }
}

希望这有帮助。

答案 10 :(得分:0)

很简单。首先分割字符串。 修剪逗号(,)后的空白。 然后使用系统定义的ToList()

string TradeTypeEnum = "Physical Deal, Physical Concentrate"

要删除','之后的空格,并将此逗号分隔的文本转换为List

List<string> IDs = (TradeTypeEnum.Split(',')).Select(t => t.Trim()).ToList();

答案 11 :(得分:0)

使用Java 8流,

  List<Integer> valueInInt1 = Arrays.stream(tags.split(",")).mapToInt(num -> Integer.parseInt(num)).boxed().collect(Collectors.toList());

  List<Integer> valueInInt2 = Arrays.stream(tags.split(",")).map(num -> Integer.parseInt(num)).collect(Collectors.toList());

我总是更喜欢Java 8流,因为您总是可以使用parallel stream。因此,如果您有成千上万的记录。很快。