开发者

C# Split a string of integers into an IEnumerable<int>

开发者 https://www.devze.com 2023-04-12 02:30 出处:网络
I need to convert开发者_开发技巧 a string of comma separated integers into a list of integers.

I need to convert开发者_开发技巧 a string of comma separated integers into a list of integers.

What is the best way to do this?

I can do it below but am worried about the performance - Is there a better more efficient way to do this?

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;
}


There's no need to call ToList, but otherwise your code looks fine:

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

You may also want to consider adding error handling in case the input string is invalid:

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;
        }
    }
}


You may at least omit first ToList() statement - so it will be

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


You can probably loop on the split result and do a yield return int.Parse... but I would not expect big differences unless you have really many items in the original string.


Use the Stringify.Library nuget package

  1. Example 1 (Default delimiter is implicitly taken as comma)
    var ids = "1, 4, 5, 7, 12"; var splitComma = new StringConverter().ConvertTo<List<int>>(ids);

  2. Example 2 (Specifying the delimiter explicitly)
    var ids = "1; 4; 5; 7; 12";
    var splitColon = new StringConverter().ConvertTo<List<int>>(ids, new ConverterOptions { Delimiter = ';' });

0

精彩评论

暂无评论...
验证码 换一张
取 消