How can I convert comma separated string into a List<int>

C#.NetStringList

C# Problem Overview


string tags = "9,3,12,43,2"

List<int> TagIds = tags.Split(',');

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

C# Solutions


Solution 1 - C#

Here is one way of doing it:

List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();

Solution 2 - C#

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();

Solution 3 - C#

You can use LINQ w/ int.Parse() to convert the string[] to an IEnumerable<int> and then pass that result to the List<T> constructor:

var tagIds = new List<int>(tags.Split(',').Select(s => int.Parse(s)));

Solution 4 - C#

A little LINQ goes a long way:

 List<int> TagIds = tags.Split(',')
         .Select(t => int.Parse(t))
         .ToList();

Solution 5 - C#

Without LINQ Query , you can choose this method ,

string tags = "9,3,12,43,2";
List<string> numbers = nos.Split(',').ToList<string>();

and then you can convert this List into integer type...

Solution 6 - C#

string tags = "9,3,12,43,2"

List<int> TagIds = tags.Split(',').Select(x => x.Trim()).Select(x=> Int32.Parse(x)).ToList();

Solution 7 - C#

If you are using C# 3.5 you can use Linq to achieve this

string tags = "9,3,12,43,2";
List<int> tagIds = tags.Split(',').Select(s=>int.Parse(s)).ToList();

or the short one

string tags = "9,3,12,43,2";
List<int> tagIds = tags.Split(',').Select(int.Parse).ToList();

Solution 8 - C#

string tags = "9,3,12,43,2";
List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();

Solution 9 - C#

I stumbled upon this and I just want to share my own solution without linq. This is a primitive approach. Non-integer values will not be added in the list also.

List<int> TagIds = new List<int>();
string[] split = tags.Split(',');
foreach (string item in split)
{
    int val = 0;
    if (int.TryParse(item, out val) == true)
    {
        TagIds.Add(val);
    }
}

Hope this helps.

Solution 10 - C#

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.

Solution 11 - C#

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();

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionnacho10fView Question on Stackoverflow
Solution 1 - C#Sergey KalinichenkoView Answer on Stackoverflow
Solution 2 - C#khalid13View Answer on Stackoverflow
Solution 3 - C#Justin NiessnerView Answer on Stackoverflow
Solution 4 - C#Henk HoltermanView Answer on Stackoverflow
Solution 5 - C#user4860969View Answer on Stackoverflow
Solution 6 - C#OybekView Answer on Stackoverflow
Solution 7 - C#Agustin MerilesView Answer on Stackoverflow
Solution 8 - C#LiquidPonyView Answer on Stackoverflow
Solution 9 - C#drchanixView Answer on Stackoverflow
Solution 10 - C#SolidSnake4444View Answer on Stackoverflow
Solution 11 - C#Parag DevghareView Answer on Stackoverflow