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.

1voto

harpo Points 17399

Je suis d'accord avec Ed. Le C# ne facilite pas les choses comme le fait VB avec ReDim Preserve. Sans collection, vous devrez copier le tableau dans un tableau plus grand.

2 votes

Dieu merci ! ReDim est incroyablement lent quand on en abuse =)

0 votes

ReDim Preserve se contente de copier le tableau dans un tableau plus grand. Il n'y a pas de redimensionnement miraculeux du tableau.

0voto

Dave Blake Points 1
private static string[] GetMergedArray(string[] originalArray, string[] newArray)
    {
        int startIndexForNewArray = originalArray.Length;
        Array.Resize<string>(ref originalArray, originalArray.Length + newArray.Length);
        newArray.CopyTo(originalArray, startIndexForNewArray);
        return originalArray;
    }

0voto

Issun Points 7271

Pourquoi ne pas essayer d'utiliser le Constructeur de cordes la classe. Elle possède des méthodes telles que .insert et .append. Vous pouvez en savoir plus à ce sujet ici : http://msdn.microsoft.com/en-us/library/2839d5h5(v=vs.71).aspx

0voto

JAR Points 21

Malheureusement, l'utilisation d'une liste ne fonctionne pas dans toutes les situations. Une liste et un tableau sont en fait différents et ne sont pas interchangeables à 100%. C'est en fonction des circonstances que cette solution est acceptable.

-1voto

Saif Points 1174

Puisque cette question n'est pas satisfaite de la réponse fournie, je voudrais ajouter cette réponse :)

public class CustomArrayList<T> 
 {  
   private T[] arr;  private int count;  

public int Count  
  {   
    get   
      {    
        return this.count;   
      }  
   }  
 private const int INITIAL_CAPACITY = 4;  

 public CustomArrayList(int capacity = INITIAL_CAPACITY) 
 {  
    this.arr = new T[capacity];   this.count = 0; 
  } 

 public void Add(T item) 
  {  
    GrowIfArrIsFull();  
   this.arr[this.count] = item;  this.count++; 
  }  

public void Insert(int index, T item) 
{  
 if (index > this.count || index < 0)  
    {   
      throw new IndexOutOfRangeException(    "Invalid index: " + index);  
     }  
     GrowIfArrIsFull();  
     Array.Copy(this.arr, index,   this.arr, index + 1, this.count - index);          
    this.arr[index] = item;  this.count++; }  

    private void GrowIfArrIsFull() 
    {  
    if (this.count + 1 > this.arr.Length)  
    {   
      T[] extendedArr = new T[this.arr.Length * 2];  
      Array.Copy(this.arr, extendedArr, this.count);  
      this.arr = extendedArr;  
    } 
  }
 }
}

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