Personnellement, je préfère mes propres extensions linguistiques, que j'ajoute ou supprime à volonté pour un prototypage rapide.
Voici un exemple pour les chaînes.
//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;
}
}
C'est beaucoup plus rapide que LINQ et Concat. Plus rapide encore, utilise un IEnumerable
wrapper de type personnalisé qui stocke les références / pointeurs des tableaux passés et permet de boucler sur toute la collection comme s'il s'agissait d'un tableau normal. (Utile en HPC, traitement graphique, rendu graphique ...)
Votre code:
var someStringArray = new[]{"a", "b", "c"};
var someStringArray2 = new[]{"d", "e", "f"};
someStringArray.Append(someStringArray2 ); //contains a,b,c,d,e,f
Pour le code complet et une version générique, voir: https://gist.github.com/lsauer/7919764
Remarque: Cela renvoie un objet IEnumerable non étendu. Retourner un objet étendu est un peu plus lent.
J'ai compilé de telles extensions depuis 2002, avec beaucoup de crédits destinés à des gens utiles sur CodeProject et 'Stackoverflow'. Je vais les publier sous peu et mettre le lien ici.