如何将逗号分隔的字符串转换为列表

本文关键字:转换 列表 int 字符串 分隔 | 更新日期: 2023-09-27 18:24:57

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

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

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

这里有一种方法可以做到这一点:

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

如果你想包含一些简单的验证并跳过无效值(而不是抛出异常(,这里有一些使用 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:由于 Charles Burns 的反馈,C# 7.0 的更新查询。请注意,我们用这种方法去除了额外的 mos 变量,所以它更干净一些。

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

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

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

一点 LINQ 大有帮助:

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

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

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

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

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

如果您使用的是 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();
string tags = "9,3,12,43,2";
List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();

我偶然发现了这个,我只想在没有 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);
    }
}

希望这有帮助。

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

var result = commaSeparatedString.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
            .Select(s => new { didConvert = int.TryParse(s.TrimNullProtection(), out convertedInt), convertedValue = convertedInt })
            .Where(w => w.didConvert)
            .Select(s => s.convertedValue)
            .ToList();

TrimNullProtection 是我制作的自定义函数,用于保护字符串是否为空。

上面所做的是去除任何无法转换的字符串,没有错误。如果您需要在转换出现问题时出错,那么接受的答案应该可以解决问题。

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

string inputText = "text1, text2"

删除","后面的空格并将此逗号分隔的文本转换为列表

List<string> resultList = (inputText.Split(',')).Select(t => t).ToList();
相关文章: