Получить все элементы, кроме первого, из массива

130

Есть ли однострочное простое выражение linq, чтобы просто получить все из простого массива, кроме первого элемента?

for (int i = 1; i <= contents.Length - 1; i++)
    Message += contents[i];

Я просто хотел посмотреть, легче ли было конденсироваться.

Ciel
источник

Ответы:

244

Да, Enumerable.Skip делает то, что вы хотите:

contents.Skip(1)

Однако результатом будет IEnumerable <T>, если вы хотите использовать массив:

contents.Skip(1).ToArray()
LBushkin
источник
Также можно обернуть contentsмассив в новый экземпляр ArraySegment<>структуры. В то время над ответом было написано, что не было особенно полезным, но с .NET 4.5 с ArraySegment<>инвентарем IList<>, IReadOnlyList<>и их базовых интерфейсов ( в том числе IEnumerable<>), так что вы можете, например , передать ArraySegment<>в string.Join.
Jeppe Stig Nielsen
Как бы я ни ненавидел Linq, я решил, что могу терпеть это только потому, что он запускается в статическом конструкторе один раз при загрузке приложения, поэтому накладные расходы на производительность отсутствуют.
Krythic
7

Следующее будет эквивалентно вашему forциклу:

foreach (var item in contents.Skip(1))
    Message += item;
Дэн Стивенс
источник
1
ты хотел var item??
Joe