26

In C#, if I have a List<MyObj> where MyObj is a custom class with an overridden ToString() method such that each MyObj object in the List can be easily converted to a string.

How can I join this List<MyObj> with a delimiter, such as for example a pipe (|) into a single string.

So, if I had 3 MyObj objects whose ToString methods would produce AAA, BBB, CCC respectively. I would create a single string: AAA|BBB|CCC.

For a list of a simpler type, such as List<string>, I perform this simply as: String.Join("|", myList.ToArray());. Is there a way I can do something similar to that? Or am I forced to iterate over the Object List and use a StringBuilder to append each object's ToString in the list together?

1

2 Answers 2

67

In .NET 4, you could just use:

var x = string.Join("|", myList);

.NET 3.5 doesn't have as many overloads for string.Join though - you need to perform the string conversion and turn it into an array explicitly:

var x = string.Join("|", myList.Select(x => x.ToString()).ToArray());

Compare the overloads available:

Sign up to request clarification or add additional context in comments.

3 Comments

Can the LINQ Join replace the string.Join?
@ÂngeloPolotto: No, they're completely different operations.
Thanks, worked perfectly with: var x = string.Join("|", myList.Select(x => x.myProperty.ToString()).ToArray());
4

Thank you, Jon Skeet. For a more complex object I use the below:

string.Join("-", item.AssessmentIndexViewPoint.Select(x =>
              x.ViewPointItem.Name).ToList())

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.