2009-04-07 6 views
1

J'ai un tableau qui est retourné mais comme je suis nouveau dans la programmation, je ne peux pas trouver comment lire chaque valeur. Quelqu'un peut-il me diriger dans la bonne direction?C# Lecture de chaque valeur d'un tableau retourné

Mon code est ci-dessous.

private void testToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
foreach (int name in getNames()) //<----I'm wrong here I guess 
{ 
    MessageBox.Show(name.ToString()); 
} 
} 

private ArrayList getNames() 
{ 
//some code... 
.. 
... 
return names; 
} 

Merci à tous

Répondre

2

Premièrement, vous ne renvoyez pas un tableau, mais plutôt une instance ArrayList. Deuxièmement, pourquoi un nom serait-il un int? Vous voulez certainement dire string? Enfin, si vous utilisez .NET 2.0 ou version ultérieure, vous pouvez utiliser des génériques pour améliorer votre code. Donc, utilisez List<string> plutôt que ArrayList.

private void testToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    foreach (string name in getNames()) 
    { 
     MessageBox.Show(name); 
    } 
} 

private List<string> GetNames() 
{ 
    var names = new List<string>(); 
    names.Add("Kent"); 
    return names; 
} 
+0

Je ne pouvais pas voir l'int pour regarder, il aurait dû être chaîne. Merci – Scott

+0

Encore mieux si la signature de la fonction GetNames() renvoie IEnumerable

0

Plutôt que d'utiliser ArrayList, essayez d'utiliser List<int>.

Je suppose que dans l'instruction foreach, vous rencontrez une exception de distribution. C'est difficile à dire parce que vous avez omis le corps de getNames().

2

La question ici est que getNames retourne un ArrayList d'objets INTs --Non.

Vous pouvez réécrire votre code avec ce changement:

foreach (object nameobj in getNames()) 
{ 
    string name = (string)nameobj; 
    MessageBox.Show(name); 
} 

Sinon, vous pouvez (et devez) utiliser les médicaments génériques pour garder tout bien rangé. Cela pourrait ressembler à ce code (non testé):

private void testToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
foreach (string name in getNames()) 
{ 
    MessageBox.Show(name); 
} 
} 

private IList<string> getNames() 
{ 
//some code... 
List<string> names = new List<string>(); 
names.Add("Scott"); 
.. 
... 
return names; 
} 

Ajouter un utilisant pour System.Collections.Generic. Aussi, comme d'autres l'ont remarqué, je l'ai changé en string de int.

+0

foreach va tenter la distribution et lancer si elle échoue. –

0

Essayez de renvoyer une liste de int à la place. Comme ceci:

private List<int> getNames() 
{ 
    //some code... 
    .. 
    ... 
    return names; 
} 

Soit ça, ou vérifier qu'il est vraiment dans des années int votre liste, de sorte que vous ne l'avez pas fait quelque chose comme list.add (« 5 »). Alors le 5 serait une chaîne, pas un int.

-1

Cela peut vous aider à démarrer:

String key, val; 

foreach (DictionaryEntry de in myArrayList) 
{ 
    key = (String)de.Key; 
    val = (MyObjectType)de.Value; 
} 

EDIT: Mise à jour pour supprimer la version IEnumerator à une version foreach. ArrayList stocke les éléments sous forme d'objets.

+0

Cela a été posté au cas où le parent était abstrait dans l'implémentation. L'utilisation de GetEnumerator() est la bonne façon de travailler à travers ces objets comme ArrayLists, HashTables etc ... – Wayne

+0

même si vous voulez travailler avec l'énumérateur vous pouvez (et devriez) toujours utiliser foreach. C'est plus simple, plus expressif et plus ouvert à l'optimisation du compilateur que la boucle while. De plus, vous n'avez pas corrigé le bogue "string au lieu d'int" – philsquared

+0

@Phil - Je comprends que la fonction s'appelle getNames() mais cela ne veut pas dire que nous devrions supposer qu'elle est supposée renvoyer une chaîne. C'est pourquoi j'ai répondu avec l'implémentation IEnumerable. Tant que le parent peut apprendre, c'est pourquoi nous sommes tous là :) – Wayne

0

Vous devez donc le décocher au type requis (int dans votre cas). Mais pourquoi int et pas de chaîne pour le nom?

Questions connexes