如何从逗号分隔的字符串创建List <T>?

Nic*_*len 14 c# generics

鉴于变量

string ids = Request.QueryString["ids"]; // "1,2,3,4,5";
Run Code Online (Sandbox Code Playgroud)

有没有办法将它转换为List而不做类似的事情

List<int> myList = new List<int>();

foreach (string id in ids.Split(','))
{
    if (int.TryParse(id))
    {
        myList.Add(Convert.ToInt32(id));
    }
}
Run Code Online (Sandbox Code Playgroud)

Jas*_*son 48

要从头开始创建列表,请使用LINQ:

ids.Split(',').Select(i => int.Parse(i)).ToList();
Run Code Online (Sandbox Code Playgroud)

如果您已经有列表对象,则省略ToList()调用并使用AddRange:

myList.AddRange(ids.Split(',').Select(i => int.Parse(i)));
Run Code Online (Sandbox Code Playgroud)

如果字符串中的某些条目可能不是整数,则可以使用TryParse:

int temp;
var myList = ids.Split(',')
    .Select(s => new { P = int.TryParse(s, out temp), I = temp })
    .Where(x => x.P)
    .Select(x => x.I)
    .ToList();
Run Code Online (Sandbox Code Playgroud)

避免temps/TryParse但跳过无效条目的最后一个(较慢)方法是使用Regex:

var myList = Regex.Matches(ids, "[0-9]+").Cast<Match>().SelectMany(m => m.Groups.Cast<Group>()).Select(g => int.Parse(g.Value));
Run Code Online (Sandbox Code Playgroud)

但是,如果您的一个条目溢出int(999999999999),则可能抛出此异常.


Ron*_*erg 8

这应该做的伎俩:

myList.Split(',').Select(s => Convert.ToInt32(s)).ToList();
Run Code Online (Sandbox Code Playgroud)

如果列表可能包含除整数之外的其他数据,TryParse则应包括调用.看到接受的答案.