How can I convert comma separated string into a List

前端 未结 11 2146
我寻月下人不归
我寻月下人不归 2020-12-07 09:16
string tags = \"9,3,12,43,2\"

List TagIds = tags.Split(\',\');

This doesn\'t work cause the split method returns a string[]

相关标签:
11条回答
  • 2020-12-07 09:57

    Here is one way of doing it:

    List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
    
    0 讨论(0)
  • 2020-12-07 09:58
    string tags = "9,3,12,43,2";
    List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
    
    0 讨论(0)
  • 2020-12-07 09:58

    It's simple. First split the string. Trim blank space present after comma(,). Then use system defined ToList()

    string inputText = "text1, text2"
    

    To remove the space after ',' and convert this comma separated text to List

    List<string> resultList = (inputText.Split(',')).Select(t => t).ToList();
    
    0 讨论(0)
  • 2020-12-07 10:00

    If you want to include some simple validation and skip over invalid values (instead of throwing an exception), here's something that uses TryParse:

    string csv = "1,2,3,4,a,5";
    int mos = 0;
    var intList = csv.Split(',')
                        .Select(m => { int.TryParse(m, out mos); return mos; })
                        .Where(m => m != 0)
                        .ToList();
    
    //returns a list with integers: 1, 2, 3, 4, 5
    

    EDIT: Here is an updated query based on feedback by Antoine. It calls TryParse first to filter out any bad values, and then Parse to do the actual conversion.

    string csv = "1,2,3,4,a,5,0,3,r,5";
    int mos = 0;
    var intList = csv.Split(',')
                        .Where(m => int.TryParse(m, out mos))
                        .Select(m => int.Parse(m))
                        .ToList();
    
    //returns a list with integers: 1, 2, 3, 4, 5, 0, 3, 5
    

    Edit 2: An updated query for C# 7.0, thanks to feedback from Charles Burns. Note that we get rid of the extra mos variable with this approach, so it's a bit cleaner.

    string csv = "1,2,3,4,a,5,0,3,r,5";
    var intList = csv.Split(',')
                     .Where(m => int.TryParse(m, out _))
                     .Select(m => int.Parse(m))
                     .ToList();
    
    0 讨论(0)
  • 2020-12-07 10:02

    I made a modification to khalid13's answer. If the user put a string of "0", his answer would remove that from the resulting list. I did something similar but used an anonymous object.

    var result = commaSeparatedString.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
                .Select(s => new { didConvert = int.TryParse(s.TrimNullProtection(), out convertedInt), convertedValue = convertedInt })
                .Where(w => w.didConvert)
                .Select(s => s.convertedValue)
                .ToList();
    

    TrimNullProtection is a custom function I made that protects if the string is null.

    What the above does is strip out any strings that were not able to be converted with no error. If you need to error if there was a problem with the conversion, then the accepted answer should do the trick.

    0 讨论(0)
提交回复
热议问题