public static void Join_StringArray(string separator, string[] values, int startIndex, int count, string expected)
{
if (startIndex + count == values.Length && count != 0)
{
Assert.Equal(expected, string.Join(separator, values));
var iEnumerableStringOptimized = new List<string>(values);
Assert.Equal(expected, string.Join(separator, iEnumerableStringOptimized));
Assert.Equal(expected, string.Join<string>(separator, iEnumerableStringOptimized)); // Call the generic IEnumerable<T>-based overload
var iEnumerableStringNotOptimized = new Queue<string>(values);
Assert.Equal(expected, string.Join(separator, iEnumerableStringNotOptimized));
Assert.Equal(expected, string.Join<string>(separator, iEnumerableStringNotOptimized));
var iEnumerableObject = new List<object>(values);
Assert.Equal(expected, string.Join(separator, iEnumerableObject));
// Bug/Documented behavior: Join(string, object[]) returns "" when the first item in the array is null
if (values.Length == 0 || values[0] != null)
{
var arrayOfObjects = (object[])values;
Assert.Equal(expected, string.Join(separator, arrayOfObjects));
}
}
Assert.Equal(expected, string.Join(separator, values, startIndex, count));
}