Посмотрим, что делает ваш код.
char[] ch = new char[1];
input.CopyTo(i, ch, 0, 1);
Это документация CopyTo
:
Копирует заданное количество символов из указанной позиции в этом случае в указанной позиции в массиве символов Unicode.
Итак, вы всегда копируете один символ строки в буфер символов длиной один. В этом случае в частности, есть гораздо более простой способ сделать это - и это даже не включает временный буфер символов:
char ch = input[i];
Теперь ваша следующая строка становится намного проще:
chars.Add(ch);
Так , в общей сложности у вас есть это:
var ch = input[i];
chars.Add(ch);
Эта переменная используется только один раз, и это, очевидно, может быть встраиваемыми, где он используется:
chars.Add(input[i]);
И поэтому весь цикл становится:
foreach (var i in indexes)
{
chars.Add(input[i]);
}
Это особый случай foreach
цикла, в котором каждая итерация вычисляет «нечто» (input[i]
) и в конце добавляет, что «что-то» к коллекции (chars.Add
). К счастью, это также очень типичный случай цикла, который можно легко превратить в LINQ.
Во-первых, необходимо определить источник, который, как правило, объект, который вы сделали foreach
на:
indexes
Затем вам нужно определить селектор, который является код, который вычисляет «что-то» вы складывали, и передать этот код метода Select
:
.Select(i => input[i])
на данный момент, у вас есть это:
indexes.Select(i => input[i]);
И вы можете добавить его в список, как это:
chars.AddRange(indexes.Select(i => input[i]));
Но если у вас есть частный случай, когда список пуст (например, потому что вы только что создали его) , то теперь вы можете быть глядя на что-то вроде этого:
var chars = new List<char>();
chars.AddRange(indexes.Select(i => input[i]));
Это также очень распространенный случай и есть метод ToList()
расширение, которое может упростить его еще больше. Этот метод в основном перечисляет запрос и создает список для вас, избавляя Вас от вызова конструктора и Add
или AddRange
методов:
var chars = indexes.Select(i => input[i]).ToList();
Спасибо за объяснение, я только начал изучать LINQ. – BladeMight