Skip to main content
.NET Framework Class Library
StringJoin Method (String, IEnumerableString)

Concatenates the members of a constructed IEnumerableT collection of type String, using the specified separator between each member.

Namespace:   System
Assembly:  mscorlib (in mscorlib.dll)
Syntax
<[%$TOPIC/dd783876_en-us_VS_110_3_0_0_0_0%](False)> _
Public Shared Function Join ( _
	separator As [%$TOPIC/dd783876_en-us_VS_110_3_0_0_0_1%], _
	values As [%$TOPIC/dd783876_en-us_VS_110_3_0_0_0_2%](Of [%$TOPIC/dd783876_en-us_VS_110_3_0_0_0_3%]) _
) As [%$TOPIC/dd783876_en-us_VS_110_3_0_0_0_4%]
[[%$TOPIC/dd783876_en-us_VS_110_3_0_1_0_0%](false)]
public static [%$TOPIC/dd783876_en-us_VS_110_3_0_1_0_1%] Join(
	[%$TOPIC/dd783876_en-us_VS_110_3_0_1_0_2%] separator,
	[%$TOPIC/dd783876_en-us_VS_110_3_0_1_0_3%]<[%$TOPIC/dd783876_en-us_VS_110_3_0_1_0_4%]> values
)
[[%$TOPIC/dd783876_en-us_VS_110_3_0_2_0_0%](false)]
public:
static [%$TOPIC/dd783876_en-us_VS_110_3_0_2_0_1%]^ Join(
	[%$TOPIC/dd783876_en-us_VS_110_3_0_2_0_2%]^ separator, 
	[%$TOPIC/dd783876_en-us_VS_110_3_0_2_0_3%]<[%$TOPIC/dd783876_en-us_VS_110_3_0_2_0_4%]^>^ values
)
[<[%$TOPIC/dd783876_en-us_VS_110_3_0_3_0_0%](false)>]
static member Join : 
        separator:[%$TOPIC/dd783876_en-us_VS_110_3_0_3_0_1%] * 
        values:[%$TOPIC/dd783876_en-us_VS_110_3_0_3_0_2%]<[%$TOPIC/dd783876_en-us_VS_110_3_0_3_0_3%]> -> [%$TOPIC/dd783876_en-us_VS_110_3_0_3_0_4%]
public static function Join(
	separator : [%$TOPIC/dd783876_en-us_VS_110_3_0_4_0_0%], 
	values : [%$TOPIC/dd783876_en-us_VS_110_3_0_4_0_1%]<[%$TOPIC/dd783876_en-us_VS_110_3_0_4_0_2%]>
) : [%$TOPIC/dd783876_en-us_VS_110_3_0_4_0_3%]

Parameters

separator
Type: SystemString

The string to use as a separator. separator is included in the returned string only if values has more than one element.

values
Type: System.Collections.GenericIEnumerable String

A collection that contains the strings to concatenate.

Return Value

Type: SystemString
A string that consists of the members of values delimited by the separator string. If values has no members, the method returns StringEmpty.
Exceptions
ExceptionCondition
ArgumentNullException

values is .

Remarks

If separator is , an empty string ( StringEmpty) is used instead. If any member of values is , an empty string is used instead.

Join(String, IEnumerableString) is a convenience method that lets you concatenate each element in an IEnumerable(Of String) collection without first converting the elements to a string array. It is particularly useful with Language-Integrated Query (LINQ) query expressions. The following example passes a List(Of String) object that contains either the uppercase or lowercase letters of the alphabet to a lambda expression that selects letters that are equal to or greater than a particular letter (which, in the example, is "M"). The IEnumerable(Of String) collection returned by the EnumerableWhere method is passed to the Join(String, IEnumerableString) method to display the result as a single string.

Imports System.Collections.Generic
Imports System.Linq

Module modMain
   Public Sub Main()
      Dim output As String = String.Join(" ", GetAlphabet(True).Where(Function(letter) _
                                                         letter >= "M"))

      Console.WriteLine(output)                                     
   End Sub 

   Private Function GetAlphabet(upper As Boolean) As List(Of String)
      Dim alphabet As New List(Of String)
      Dim charValue As Integer = CInt(IIf(upper, 65, 97))
      For ctr As Integer = 0 To 25
         alphabet.Add(ChrW(charValue + ctr).ToString())
      Next 
      Return alphabet 
   End Function 
End Module 
' The example displays the following output: 
'      M N O P Q R S T U V W X Y Z
using System;
using System.Collections.Generic;
using System.Linq;

public class Example
{
   public static void Main()
   {
      string output = String.Join(" ", GetAlphabet(true).Where( letter => 
                      letter.CompareTo("M") >= 0));
      Console.WriteLine(output);  
   }

   private static List<string> GetAlphabet(bool upper)
   {
      List<string> alphabet = new List<string>();
      int charValue = upper ? 65 : 97;
      for (int ctr = 0; ctr <= 25; ctr++)
         alphabet.Add(Convert.ToChar(charValue + ctr).ToString());
      return alphabet; 
   }
}
// The example displays the following output: 
//      M N O P Q R S T U V W X Y Z
Examples

The following example uses the Sieve of Eratosthenes algorithm to calculate the prime numbers that are less than or equal to 100. It assigns the result to a ListT object of type String, which it then passes to the Join(String, IEnumerableString) method.

Imports System.Collections.Generic

Module Example
   Public Sub Main()
      Dim maxPrime As Integer = 100
      Dim primes As List(Of String) = GetPrimes(maxPrime)
      Console.WriteLine("Primes less than {0}:", maxPrime)
      Console.WriteLine("   {0}", String.Join(" ", primes))
   End Sub 

   Private Function GetPrimes(maxPrime As Integer) As List(Of String)
      Dim values As Array = Array.CreateInstance(GetType(Integer), _
                              New Integer() { maxPrime - 1}, New Integer(){ 2 }) 
        ' Use Sieve of Eratosthenes to determine prime numbers. 
      For ctr As Integer = values.GetLowerBound(0) To _
                           CInt(Math.Ceiling(Math.Sqrt(values.GetUpperBound(0))))
         If CInt(values.GetValue(ctr)) = 1 Then Continue For 

         For multiplier As Integer = ctr To maxPrime \ 2
            If ctr * multiplier <= maxPrime Then values.SetValue(1, ctr * multiplier)
         Next    
      Next       

      Dim primes As New List(Of String)
      For ctr As Integer = values.GetLowerBound(0) To values.GetUpperBound(0)
         If CInt(values.GetValue(ctr)) = 0 Then primes.Add(ctr.ToString())
      Next             
      Return primes
   End Function    
End Module 
' The example displays the following output: 
'    Primes less than 100: 
'       2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
using System;
using System.Collections.Generic;

public class Example
{
   public static void Main()
   {
      int maxPrime = 100;
      List<int> primes = GetPrimes(maxPrime);
      Console.WriteLine("Primes less than {0}:", maxPrime);
      Console.WriteLine("   {0}", String.Join(" ", primes));
   }

   private static List<int> GetPrimes(int maxPrime)
   {
      Array values = Array.CreateInstance(typeof(int), 
                              new int[] { maxPrime - 1}, new int[] { 2 });
      // Use Sieve of Eratosthenes to determine prime numbers. 
      for (int ctr = values.GetLowerBound(0); ctr <= (int) Math.Ceiling(Math.Sqrt(values.GetUpperBound(0))); ctr++)
      {

         if ((int) values.GetValue(ctr) == 1) continue;

         for (int multiplier = ctr; multiplier <=  maxPrime / 2; multiplier++)
            if (ctr * multiplier <= maxPrime)
               values.SetValue(1, ctr * multiplier);
      }      

      List<int> primes = new List<int>();
      for (int ctr = values.GetLowerBound(0); ctr <= values.GetUpperBound(0); ctr++)
         if ((int) values.GetValue(ctr) == 0) 
            primes.Add(ctr);
      return primes;
   }   
}
// The example displays the following output: 
//    Primes less than 100: 
//       2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
Version Information

.NET Framework

Supported in: 4.6, 4.5, 4

.NET Framework Client Profile

Supported in: 4

Portable Class Library

Supported in: Portable Class Library

Supported in: Windows Phone 8.1

Supported in: Windows Phone Silverlight 8.1

Supported in: Windows Phone Silverlight 8