Skip to content

Commit 0191cb5

Browse files
authored
Merge pull request #11 from xin9le/join-overloads
Add ZString.Join<T>(char, XxxCollection) overloads
2 parents 80bc1e9 + 3504ad4 commit 0191cb5

File tree

3 files changed

+115
-0
lines changed

3 files changed

+115
-0
lines changed

src/ZString.Unity/Assets/Scripts/ZString/ZString.cs

+43
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,29 @@ public static string Join<T>(char separator, params T[] values)
5555
}
5656
}
5757

58+
/// <summary>Concatenates the elements of an array, using the specified seperator between each element.</summary>
59+
public static string Join<T>(char separator, List<T> values)
60+
{
61+
var sb = new Utf16ValueStringBuilder(true);
62+
try
63+
{
64+
var count = values.Count;
65+
for (int i = 0; i < count; i++)
66+
{
67+
if (i != 0)
68+
{
69+
sb.Append(separator);
70+
}
71+
sb.Append(values[i]);
72+
}
73+
return sb.ToString();
74+
}
75+
finally
76+
{
77+
sb.Dispose();
78+
}
79+
}
80+
5881
/// <summary>Concatenates the elements of an array, using the specified seperator between each element.</summary>
5982
public static string Join<T>(char separator, ReadOnlySpan<T> values)
6083
{
@@ -105,6 +128,26 @@ public static string Join<T>(char separator, IEnumerable<T> values)
105128
}
106129
}
107130

131+
public static string Join<T>(char separator, ICollection<T> values)
132+
{
133+
return Join(separator, values.AsEnumerable());
134+
}
135+
136+
public static string Join<T>(char separator, IList<T> values)
137+
{
138+
return Join(separator, values.AsEnumerable());
139+
}
140+
141+
public static string Join<T>(char separator, IReadOnlyList<T> values)
142+
{
143+
return Join(separator, values.AsEnumerable());
144+
}
145+
146+
public static string Join<T>(char separator, IReadOnlyCollection<T> values)
147+
{
148+
return Join(separator, values.AsEnumerable());
149+
}
150+
108151
/// <summary>Concatenates the elements of an array, using the specified seperator between each element.</summary>
109152
public static string Join<T>(string separator, params T[] values)
110153
{

src/ZString/ZString.cs

+43
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,29 @@ public static string Join<T>(char separator, params T[] values)
5555
}
5656
}
5757

58+
/// <summary>Concatenates the elements of an array, using the specified seperator between each element.</summary>
59+
public static string Join<T>(char separator, List<T> values)
60+
{
61+
var sb = new Utf16ValueStringBuilder(true);
62+
try
63+
{
64+
var count = values.Count;
65+
for (int i = 0; i < count; i++)
66+
{
67+
if (i != 0)
68+
{
69+
sb.Append(separator);
70+
}
71+
sb.Append(values[i]);
72+
}
73+
return sb.ToString();
74+
}
75+
finally
76+
{
77+
sb.Dispose();
78+
}
79+
}
80+
5881
/// <summary>Concatenates the elements of an array, using the specified seperator between each element.</summary>
5982
public static string Join<T>(char separator, ReadOnlySpan<T> values)
6083
{
@@ -105,6 +128,26 @@ public static string Join<T>(char separator, IEnumerable<T> values)
105128
}
106129
}
107130

131+
public static string Join<T>(char separator, ICollection<T> values)
132+
{
133+
return Join(separator, values.AsEnumerable());
134+
}
135+
136+
public static string Join<T>(char separator, IList<T> values)
137+
{
138+
return Join(separator, values.AsEnumerable());
139+
}
140+
141+
public static string Join<T>(char separator, IReadOnlyList<T> values)
142+
{
143+
return Join(separator, values.AsEnumerable());
144+
}
145+
146+
public static string Join<T>(char separator, IReadOnlyCollection<T> values)
147+
{
148+
return Join(separator, values.AsEnumerable());
149+
}
150+
108151
/// <summary>Concatenates the elements of an array, using the specified seperator between each element.</summary>
109152
public static string Join<T>(string separator, params T[] values)
110153
{

tests/ZString.Tests/JoinTest.cs

+29
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,35 @@ public void JoinOverloads2()
6363
ZString.Join("_,_", (IReadOnlyCollection<int>)new[] { 1, 2, 3 }).Should().Be(string.Join("_,_", new[] { 1, 2, 3 }));
6464
}
6565

66+
[Fact]
67+
public void JoinOverloads3()
68+
{
69+
ZString.Join(',', new string[] { }.ToList()).Should().Be(string.Join(',', new string[0]));
70+
ZString.Join(',', new[] { 1 }.ToList()).Should().Be(string.Join(',', new[] { 1 }));
71+
ZString.Join(',', new[] { 1, 2 }.ToList()).Should().Be(string.Join(',', new[] { 1, 2 }));
72+
ZString.Join(',', new[] { 1, 2, 3 }.ToList()).Should().Be(string.Join(',', new[] { 1, 2, 3 }));
73+
74+
ZString.Join(',', (IList<int>)new int[] { }).Should().Be(string.Join(',', new string[0]));
75+
ZString.Join(',', (IList<int>)new[] { 1 }).Should().Be(string.Join(',', new[] { 1 }));
76+
ZString.Join(',', (IList<int>)new[] { 1, 2 }).Should().Be(string.Join(',', new[] { 1, 2 }));
77+
ZString.Join(',', (IList<int>)new[] { 1, 2, 3 }).Should().Be(string.Join(',', new[] { 1, 2, 3 }));
78+
79+
ZString.Join(',', (IReadOnlyList<int>)new int[] { }).Should().Be(string.Join(',', new string[0]));
80+
ZString.Join(',', (IReadOnlyList<int>)new[] { 1 }).Should().Be(string.Join(',', new[] { 1 }));
81+
ZString.Join(',', (IReadOnlyList<int>)new[] { 1, 2 }).Should().Be(string.Join(',', new[] { 1, 2 }));
82+
ZString.Join(',', (IReadOnlyList<int>)new[] { 1, 2, 3 }).Should().Be(string.Join(',', new[] { 1, 2, 3 }));
83+
84+
ZString.Join(',', (ICollection<int>)new int[] { }).Should().Be(string.Join(',', new string[0]));
85+
ZString.Join(',', (ICollection<int>)new[] { 1 }).Should().Be(string.Join(',', new[] { 1 }));
86+
ZString.Join(',', (ICollection<int>)new[] { 1, 2 }).Should().Be(string.Join(',', new[] { 1, 2 }));
87+
ZString.Join(',', (ICollection<int>)new[] { 1, 2, 3 }).Should().Be(string.Join(',', new[] { 1, 2, 3 }));
88+
89+
ZString.Join(',', (IReadOnlyCollection<int>)new int[] { }).Should().Be(string.Join(',', new string[0]));
90+
ZString.Join(',', (IReadOnlyCollection<int>)new[] { 1 }).Should().Be(string.Join(',', new[] { 1 }));
91+
ZString.Join(',', (IReadOnlyCollection<int>)new[] { 1, 2 }).Should().Be(string.Join(',', new[] { 1, 2 }));
92+
ZString.Join(',', (IReadOnlyCollection<int>)new[] { 1, 2, 3 }).Should().Be(string.Join(',', new[] { 1, 2, 3 }));
93+
}
94+
6695
[Fact]
6796
public void CooncatNullTest()
6897
{

0 commit comments

Comments
 (0)