Вы также можете сделать это:
public static string Join<T>(this IReadOnlyCollection<T> me,
string separator, int startIndex = 0, int endIndexInclusive = -1)
{
if (endIndexInclusive < 0)
endIndexInclusive += me.Count;
var range = me.Skip(startIndex).Take(endIndexInclusive - startIndex + 1);
return string.Join(separator, range);
}
Идея здесь заключается в том, что отрицательные индексы отсчитываются с другого конца, поэтому -1
- последний индекс, -2
- этоиндекс от второго до последнего и так далее.Значение, принятое, если аргумент не указан явно, -1
, означает последнюю запись в коллекции.
(Вы также можете включить if (startIndex < 0) startIndex += me.Count;
, если хотите.)
Методбыл сделан общим (общим), но все еще может использоваться на string[]
.Пример:
string[] myArray = ...
var joined = myArray.Join(",", 2, -3); // skips first two, and last two, entries
Помните, что -3
также можно записать как ~2
, используя побитовое дополнение.Это выглядит более симметрично, myArray.Join(",", 2, ~2)
.