2013-05-12 14 views
8

Sto scrivendo un programma che dovrebbe visualizzare gli elementi da una matrice in un ciclo foreach.Utilizzo di un ciclo "foreach" con stringArray in C#

Volevo modificare gli elementi dell'array aggiungendo una stringa "triste" a ciascun elemento, ma quando si esegue il programma l'array rimane lo stesso.

namespace ConsoleApplication3 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string[] stringArray = {"hey", "Tom"}; 

      for (int i = 0; i < stringArray.Length; i++) 
      { 
       stringArray[i] += " dad"; 
       Console.WriteLine(stringArray[i]); 
      } 

      Array.Resize(ref stringArray, stringArray.Length + 1); 

      // Add bob to the last element of the array 
      stringArray[stringArray.Length - 1] =" bob"; 

      foreach (string s in stringArray) 
      { 
       string b = s + "sad"; 
       Console.WriteLine(s); 
       //Console.WriteLine(stringArray); 
      } 
     } 
    } 
} 
+0

si dovrebbe cambiare stringa b = s + "tristi"; per stringere s + = "triste"; –

+0

possibile errore 'Console.WriteLine (b);' invece di 'Console.WriteLine (s);' – Emre

risposta

3
string b = s + "sad"; 

Console.WriteLine(s); 

//Console.WriteLine(stringArray); 

In nessun momento nel codice si fa a modificare i valori nella matrice. Si crea un nuovo string da ciascun valore nell'array, concatenato con la stringa "sad".

Soluzione

Non è possibile modificare una variabile for-each. Riceverai un messaggio del tipo:

Impossibile assegnare a "s" perché è una "variabile di iterazione foreach".

Invece, accontentarsi di un semplice ciclo for.

for(int x = 0; x < stringArray.length; x++) 
{ 
    stringArray[x] = stringArray[x] + "sad"; 
} 
0

Guardate questa parte del codice:

string b = s + "sad"; 
Console.WriteLine(s); 

Si stanno concatenando la stringa in s con la stringa "sad", e la memorizzazione nella variabile b. Quindi viene visualizzato il contenuto della variabile s. Se si visualizzasse il contenuto della variabile b, ci sarebbe un sad alla fine di ogni stringa.

+0

ok, grazie ragazzi, ho capito! – user2371290

5
 foreach (string s in stringArray) 
     { 
      string b = s + "sad"; 
      // ... 
     } 

Qui si sta creando una nuova stringa, completamente estranei alla stringa nella stringa-array. Non hai cambiato la vecchia stringa (non puoi, le stringhe sono immutabili). È quindi semplicemente cadere questa nuova stringa più lunga sul pavimento - non si sta aggiornando la matrice ecc

Prova invece qualcosa di simile:

for(int i = 0 ; i < stringArray.Length ; i++) 
{ 
    stringArray[i] = stringArray[i] + "sad"; 
} 

Questo sostituisce ogni elemento dell'array con una nuova stringa . Si noti che non è possibile aggiornare una lista/collezione/array ecc mentre itera con foreach - che può interrompere l'iteratore. Quindi il ciclo for invece.

7

A parte quello che Chris ha detto, si può semplicemente utilizzare LINQ per ottenere ciò che si vuole:

string[] newStringArray = stringArray 
    .Select(s => s + "sad") 
    .ToArray();