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.
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.
L'utilisation d'un autre mécanisme que celui demandé dans la question n'est pas une réponse.
@user2190035 : Je ne sais pas trop où vous avez trouvé cette idée, et les 111 personnes qui ont voté en amont ne sont pas d'accord avec vous. Si vous connaissez une meilleure façon d'étendre un tableau, alors n'hésitez pas à la poster. Je doute que votre réallocation et votre copie manuelle soient meilleures que l'utilisation d'une liste. Parfois la réponse est "ne faites pas ça".
Ce n'est pas adapté pour plus de quelques invocations. parce que la fonction 'Resize' est très performante. mais pour une ou deux invocations, c'est très bien.
Utilisation de LINQ :
arr = (arr ?? Enumerable.Empty<string>()).Concat(new[] { newitem }).ToArray();
J'aime l'utiliser car il s'agit d'une ligne unique et très pratique à intégrer dans une instruction switch, une simple instruction if, ou à passer comme argument.
EDIT :
Certaines personnes n'aiment pas new[] { newitem }
car il crée un petit tableau temporaire d'un seul élément. Voici une version utilisant Enumerable.Repeat
qui ne nécessite pas la création d'un objet (du moins pas en apparence - les itérateurs .NET créent probablement un tas d'objets de machine d'état sous la table).
arr = (arr ?? Enumerable.Empty<string>()).Concat(Enumerable.Repeat(newitem,1)).ToArray();
Et si vous êtes sûr que le tableau n'est jamais null
pour commencer, vous pouvez le simplifier en :
arr.Concat(Enumerable.Repeat(newitem,1)).ToArray();
Notez que si vous voulez ajouter des éléments à une collection ordonnée, List
est probablement la structure de données que vous voulez, pas un tableau pour commencer.
Très bien +1. J'ai un code similaire en tant que méthode d'extension générique. J'ai inclus le code dans cette réponse : stackoverflow.com/a/11035286/673545
Très vieille question, mais je voulais quand même ajouter ceci.
Si vous cherchez une phrase unique, vous pouvez utiliser le code ci-dessous. Il combine le constructeur de liste qui accepte un énumérable et la syntaxe de l'initialisateur "new" (depuis la question posée).
myArray = new List<string>(myArray) { "add this" }.ToArray();
Les tableaux en C# sont immuables par exemple string[]
, int[]
. Cela signifie que vous ne pouvez pas les redimensionner. Vous devez créer un tout nouveau tableau.
Voici le code pour Redimensionner un tableau :
public static void Resize<T>(ref T[] array, int newSize)
{
if (newSize < 0)
{
throw new ArgumentOutOfRangeException("newSize", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
}
T[] sourceArray = array;
if (sourceArray == null)
{
array = new T[newSize];
}
else if (sourceArray.Length != newSize)
{
T[] destinationArray = new T[newSize];
Copy(sourceArray, 0, destinationArray, 0, (sourceArray.Length > newSize) ? newSize : sourceArray.Length);
array = destinationArray;
}
}
Comme vous pouvez le voir, il crée un nouveau tableau avec la nouvelle taille, copie le contenu du tableau source et définit la référence au nouveau tableau. L'astuce pour cela est la fonction réf. pour le premier paramètre.
Il existe des listes qui peuvent allouer dynamiquement de nouveaux créneaux horaires pour les nouveaux articles. Il s'agit par exemple de Liste<T> . Ceux-ci contiennent des tableaux immuables et les redimensionnent si nécessaire (List<T> n'est pas une implémentation de liste chaînée !). Liste de tableaux est la même chose sans les génériques (avec Objet ).
Liste de liens<T> est une véritable implémentation de liste liée. Malheureusement, vous ne pouvez ajouter que des éléments LinkListNode<T> à la liste, vous devez donc envelopper vos propres éléments de liste dans ce type de nœud. Je pense que son utilisation est peu courante.
Seule une réponse qui explique pourquoi ce n'est pas possible et qui ne se contente pas de suggérer l'utilisation d'une liste...
Je crois Aray.Resize
permet de redimensionner un tableau sans en perdre le contenu. docs.microsoft.com/en-us/dotnet/api/
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.