159 votes

Ajouter un nouvel élément dans un tableau existant en c#.net

Comment ajouter un nouvel élément dans un tableau de chaînes existant en C#.net ?

J'ai besoin de préserver les données existantes.

27voto

tmania Points 111
 Array.Resize(ref youur_array_name, your_array_name.Length + 1);
 your_array_name[your_array_name.Length - 1] = "new item";

13voto

0xced Points 10972

Une nouvelle Append<TSource> a été ajoutée à la méthode IEnumerable<TSource> depuis .NET Framework 4.7.1 et .NET Core 1.0.

Voici comment l'utiliser :

var numbers = new [] { "one", "two", "three" };
numbers = numbers.Append("four").ToArray();
Console.WriteLine(string.Join(", ", numbers)); // one, two, three, four

Notez que si vous voulez ajouter l'élément au début du tableau, vous pouvez utiliser la nouvelle fonction Prepend<TSource> à la place.

8voto

dblood Points 928

Vous pouvez développer la réponse fournie par @Stephen Chung en utilisant sa logique basée sur LINQ pour créer une méthode d'extension utilisant un type générique.

public static class CollectionHelper
{
    public static IEnumerable<T> Add<T>(this IEnumerable<T> sequence, T item)
    {
        return (sequence ?? Enumerable.Empty<T>()).Concat(new[] { item });
    }

    public static T[] AddRangeToArray<T>(this T[] sequence, T[] items)
    {
        return (sequence ?? Enumerable.Empty<T>()).Concat(items).ToArray();
    }

    public static T[] AddToArray<T>(this T[] sequence, T item)
    {
        return Add(sequence, item).ToArray();
    }

}

Vous pouvez ensuite l'appeler directement sur le tableau comme ceci.

    public void AddToArray(string[] options)
    {
        // Add one item
        options = options.AddToArray("New Item");

        // Add a 
        options = options.AddRangeToArray(new string[] { "one", "two", "three" });

        // Do stuff...
    }

Certes, la méthode AddRangeToArray() semble un peu exagérée puisque vous avez la même fonctionnalité avec Concat() mais de cette façon le code final peut "travailler" avec le tableau directement contrairement à ce qui se passe ici :

options = options.Concat(new string[] { "one", "two", "three" }).ToArray();

0 votes

J'ai ajouté une option permettant de supprimer un élément (j'espère que vous êtes d'accord).

0 votes

@TalSegal vous êtes le bienvenu, c'est un plaisir. Utilisez le code comme bon vous semble !

8voto

Adi_Pithwa Points 216

Donc, si vous avez un tableau existant, ma solution rapide sera de

var tempList = originalArray.ToList();
tempList.Add(newitem);

Maintenant, il suffit de remplacer le tableau original par le nouveau tableau.

originalArray = tempList.ToArray();

0 votes

Résolu ma solution

7voto

Soren Points 684

Il est préférable de garder le tableau immuable et de taille fixe.

vous pouvez simuler Add par Extension Method y IEnumerable.Concat()

public static class ArrayExtensions
    {
        public static string[] Add(this string[] array, string item)
        {
            return array.Concat(new[] {item}).ToArray();
        }
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X