Вместо использования методов, которые принимают массивы, ваши методы должны принимать IEnumerable<string>
s. Так как они являются просто «итераторами», нет необходимости копировать все элементы, когда вы хотите передать дополнительный элемент.
Во-первых, поместите фактические логические значения c из Concat
в метод, который принимает IEnumerable<string>
и имеют перегрузку c переменной Concat
, которая вызывает перегрузку IEnumerable<string>
:
class StringHelper
{
public string Concat(IEnumerable<string> values)
{
lock (_stringBuilder)
{
Clear();
foreach (string value in values)
_stringBuilder.Append(value);
return _stringBuilder.ToString();
}
}
public string Concat(params string[] values) {
return Concat((IEnumerable<string>)values);
}
}
Теперь вы можете вызвать перегрузку IEnumerable<string>
в методе расширения:
public static string Concat(this string str, params string[] values)
{
return _stringHelper.Concat(values.Prepend(str));
}