给定变量
string ids = Request.QueryString["ids"]; // "1,2,3,4,5";
有没有办法把它转换成一个列表而不用做类似的事情
List<int> myList = new List<int>();
foreach (string id in ids.Split(','))
{
if (int.TryParse(id))
{
myList.Add(Convert.ToInt32(id));
}
}
最佳答案
要从头开始创建列表,请使用 LINQ:
ids.Split(',').Select(i => int.Parse(i)).ToList();
如果您已经有了列表对象,请省略 ToList() 调用并使用 AddRange:
myList.AddRange(ids.Split(',').Select(i => int.Parse(i)));
如果字符串中的某些条目可能不是整数,则可以使用 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();
避免 temps/TryParse 但跳过无效条目的最终(较慢)方法是使用正则表达式:
var myList = Regex.Matches(ids, "[0-9]+").Cast<Match>().SelectMany(m => m.Groups.Cast<Group>()).Select(g => int.Parse(g.Value));
但是,如果您的其中一个条目溢出 int (999999999999),这可能会抛出异常。
关于c# - 如何从逗号分隔的字符串创建 List<T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/910119/