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

标签 c# generics

给定变量

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/

相关文章:

c# - 单个整数的 Web API ResponseType

c# - 菜单快捷键范围

Swift - 当可相等时比较泛型

c# - 为什么在泛型方法中不调用显式运算符

c# - 在 C# : How to declare a generic Dictionary with a type as key and an IEnumerable<> of that type as value? 中

c# - 数组中的对象没有被垃圾收集

c# - 单元测试 C# 重构静态方法

c# - WPF 中的简单数据绑定(bind)

generics - 初始化器作为 Swift 中转换为新类型的一种方式

javascript - 如何让基本泛型类型知道 TypeScript 中的子泛型?