Лично я предпочитаю свои собственные языковые расширения, которые я добавляю или удаляю по желанию для быстрого создания прототипов.
Ниже приведен пример для строк.
//resides in IEnumerableStringExtensions.cs
public static class IEnumerableStringExtensions
{
public static IEnumerable<string> Append(this string[] arrayInitial, string[] arrayToAppend)
{
string[] ret = new string[arrayInitial.Length + arrayToAppend.Length];
arrayInitial.CopyTo(ret, 0);
arrayToAppend.CopyTo(ret, arrayInitial.Length);
return ret;
}
}
Это намного быстрее, чем LINQ и Concat. Более того, используется пользовательская IEnumerableоболочка типа, которая хранит ссылки / указатели переданных массивов и позволяет циклически перемещаться по всей коллекции, как если бы это был обычный массив. (Полезно в HPC, обработка графики, рендеринг графики ...)
Ваш код:
var someStringArray = new[]{"a", "b", "c"};
var someStringArray2 = new[]{"d", "e", "f"};
someStringArray.Append(someStringArray2 ); //contains a,b,c,d,e,f
Полный код и дженериковую версию см. По адресу : https://gist.github.com/lsauer/7919764.
Примечание: это возвращает нерасширенный объект IEnumerable. Возвращать расширенный объект немного медленнее.
Я скомпилировал такие расширения с 2002 года, и многие из них были полезны людям, работающим с CodeProject и Stackoverflow. Я выпущу их в ближайшее время и выложу ссылку здесь.