Skip to content

Commit 705b831

Browse files
committed
Avoid branch for separator for enumerable path parameters
Assuming configured array types will implement System.Collections.Generic.IEnumerable<T>, use IEnumerator<T> directly to add separator before any but the first item of an enumerable path parameter.
1 parent eeceb8e commit 705b831

File tree

1 file changed

+30
-15
lines changed

1 file changed

+30
-15
lines changed

src/NSwag.CodeGeneration.CSharp/Templates/Client.Class.PathParameter.liquid

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,50 @@
11
{% if parameter.IsDateTimeArray -%}
2+
using (var enumerator = {{ parameter.VariableName }}.GetEnumerator())
23
{
3-
bool isAfterFirst = false;
4-
foreach (var item in {{ parameter.VariableName }})
4+
if (enumerator.MoveNext())
55
{
6-
if (isAfterFirst) urlBuilder_.Append(',');
7-
urlBuilder_.Append(System.Uri.EscapeDataString(item.ToString("{{ ParameterDateTimeFormat }}", System.Globalization.CultureInfo.InvariantCulture)));
8-
isAfterFirst = true;
6+
urlBuilder_.Append(System.Uri.EscapeDataString(enumerator.Current.ToString("{{ ParameterDateTimeFormat }}", System.Globalization.CultureInfo.InvariantCulture)));
7+
8+
do
9+
{
10+
urlBuilder_.Append(',');
11+
urlBuilder_.Append(System.Uri.EscapeDataString(enumerator.Current.ToString("{{ ParameterDateTimeFormat }}", System.Globalization.CultureInfo.InvariantCulture)));
12+
}
13+
while (enumerator.MoveNext());
914
}
1015
}
1116
{% elsif parameter.IsDateArray -%}
17+
using (var enumerator = {{ parameter.VariableName }}.GetEnumerator())
1218
{
13-
bool isAfterFirst = false;
14-
foreach (var item in {{ parameter.VariableName }})
19+
if (enumerator.MoveNext())
1520
{
16-
if (isAfterFirst) urlBuilder_.Append(',');
17-
urlBuilder_.Append(System.Uri.EscapeDataString(item.ToString("{{ ParameterDateFormat }}", System.Globalization.CultureInfo.InvariantCulture)));
18-
isAfterFirst = true;
21+
urlBuilder_.Append(System.Uri.EscapeDataString(enumerator.Current.ToString("{{ ParameterDateFormat }}", System.Globalization.CultureInfo.InvariantCulture)));
22+
23+
do
24+
{
25+
urlBuilder_.Append(',');
26+
urlBuilder_.Append(System.Uri.EscapeDataString(enumerator.Current.ToString("{{ ParameterDateFormat }}", System.Globalization.CultureInfo.InvariantCulture)));
27+
}
28+
while (enumerator.MoveNext());
1929
}
2030
}
2131
{% elsif parameter.IsDateTime -%}
2232
urlBuilder_.Append(System.Uri.EscapeDataString({{ parameter.VariableName }}.ToString("{{ ParameterDateTimeFormat }}", System.Globalization.CultureInfo.InvariantCulture)));
2333
{% elsif parameter.IsDate -%}
2434
urlBuilder_.Append(System.Uri.EscapeDataString({{ parameter.VariableName }}.ToString("{{ ParameterDateFormat }}", System.Globalization.CultureInfo.InvariantCulture)));
2535
{% elsif parameter.IsArray -%}
36+
using (var enumerator = {{ parameter.VariableName }}.GetEnumerator())
2637
{
27-
bool isAfterFirst = false;
28-
foreach (var item in {{ parameter.VariableName }})
38+
if (enumerator.MoveNext())
2939
{
30-
if (isAfterFirst) urlBuilder_.Append(',');
31-
urlBuilder_.Append(ConvertToString(item, System.Globalization.CultureInfo.InvariantCulture));
32-
isAfterFirst = true;
40+
urlBuilder_.Append(ConvertToString(enumerator.Current, System.Globalization.CultureInfo.InvariantCulture));
41+
42+
do
43+
{
44+
urlBuilder_.Append(',');
45+
urlBuilder_.Append(ConvertToString(enumerator.Current, System.Globalization.CultureInfo.InvariantCulture));
46+
}
47+
while (enumerator.MoveNext());
3348
}
3449
}
3550
{% else -%}

0 commit comments

Comments
 (0)