C#将整数字符串拆分为IEnumerable <int> </int>

时间:2011-10-11 18:05:04

标签: c# parsing syntax

我需要将逗号分隔的整数字符串转换为整数列表。

这样做的最佳方式是什么?

我可以在下面做,但我担心性能 - 是否有更好的方法来做到这一点?

public IEnumerable<int> GetListOfIds()
{
    string Ids = "1,4,5,7,12"; // would be passed into method
    List<int> _result = Ids.Split(',')
                           .ToList()
                           .Select(item => int.Parse(item))
                           .ToList();

    return _result;
}

4 个答案:

答案 0 :(得分:11)

无需拨打ToList,但您的代码看起来不错:

public IEnumerable<int> GetListOfIds(string ids)
{
    return ids.Split(',').Select(item => int.Parse(item));
}

如果输入字符串无效,您可能还需要考虑添加错误处理:

public IEnumerable<int> GetListOfIds(string ids)
{
    foreach (string part in ids.Split(','))
    {
        int x;
        if (!int.TryParse(part, out x))
        {
            throw new ArgumentException(
                string.Format("The value {0} cannot be parsed as an integer.", part),
                "ids");
        }
        else
        {
            yield return x;
        }
    }
}

答案 1 :(得分:1)

你至少可以省略第一个ToList()语句 - 所以它将是

  List<int> _result = Ids.Split(',').Select(item => int.Parse(item)).ToList();

答案 2 :(得分:0)

你可以循环分割结果并做一个yield return int.Parse ...但是除非原始字符串中有很多项目,否则我不会期待很大的差异。

答案 3 :(得分:0)

使用Stringify.Library nuget包

  1. 示例1(默认分隔符隐式地被视为逗号)
    var ids = "1, 4, 5, 7, 12"; var splitComma = new StringConverter().ConvertTo<List<int>>(ids);

  2. 示例2(明确指定分隔符)
    var ids = "1; 4; 5; 7; 12";
    var splitColon = new StringConverter().ConvertTo<List<int>>(ids, new ConverterOptions { Delimiter = ';' });