Допустим, у меня есть массив
string[] arr = new string[] {"1","2","3"};
Я хотел бы добавить строку в конец значения, примерно так:
arr.appendToEnd(" Test");
return arr; // returns {"1 Test","2 Test","3 Test"}
Мне было интересно, есть ли что-то встроенное, которое может это сделать, вместо того, чтобы создавать собственный метод расширения.
Нет ничего встроенного. Вы можете использовать LINQ для легкого создания нового массива:
arr = arr.Select(x => x + " Test").ToArray();
... но это не изменит исходный массив. Если что-либо еще имеет ссылку на исходный массив, они не будут видеть изменения. Обычно это действительно хорошая ИМО, но иногда вы можете изменить существующую коллекцию.
Для этого вы можете написать свой собственный метод общего назначения, чтобы изменить существующий массив (или любую другую реализацию IList<T>
):
public static void ModifyAll<T>(this IList<T> source, Func<T, T> modification)
{
// TODO: Argument validation
for (int i = 0; i < source.Count; i++)
{
source[i] = modification(source[i]);
}
}
Тогда вы можете использовать:
arr.ModifyAll(x => x + " Test");
Я определенно использовал бы это, а не писал метод расширения, специфичный для строки-конкатенации.
arr
прежде чем использовать .ToArray()
? (Любопытно)
arr.Select(x => x + " Test")
возвращает лениво оцененный итератор, который выдаст результат проекции при запросе. Это не изменяет arr
вообще.
Если "встроенный" означает функцию appendToEnd
, то нет.
Однако его достаточно легко сделать:
arr = arr.Select(s => s + " Test").ToArray();