鉴于变量
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),则可能抛出此异常.
这应该做的伎俩:
myList.Split(',').Select(s => Convert.ToInt32(s)).ToList();
Run Code Online (Sandbox Code Playgroud)
如果列表可能包含除整数之外的其他数据,TryParse
则应包括调用.看到接受的答案.