J'ai une liste de tuples:
List<Tuple<int, string, int>> people = new List<Tuple<int, string, int>>();
En utilisant dataReader
, je peux renseigner cette liste avec différentes valeurs:
people.Add(new Tuple<int, string, int>(myReader.GetInt32(4), myReader.GetString(3), myReader.GetInt32(5)));
Mais alors, comment puis-je parcourir, en obtenant chaque valeur individuelle. Par exemple, je souhaiterais peut-être lire les 3 détails concernant une personne spécifique. Disons qu'il y a un identifiant, un nom et un numéro de téléphone. Je veux quelque chose comme ce qui suit:
for (int i = 0; i < people.Count; i++)
{
Console.WriteLine(people.Item1[i]); //the int
Console.WriteLine(people.Item2[i]); //the string
Console.WriteLine(people.Item3[i]); //the int
}
people
est une liste, vous devez donc indexer dans la liste first , puis vous pouvez référencer l’élément de votre choix.
for (int i = 0; i < people.Count; i++)
{
people[i].Item1;
// Etc.
}
Gardez juste à l’esprit les types avec lesquels vous travaillez, et ce genre d’erreurs sera peu répandu.
people; // Type: List<T> where T is Tuple<int, string, int>
people[i]; // Type: Tuple<int, string, int>
people[i].Item1; // Type: int
Vous indexez le mauvais objet. people
est le tableau que vous souhaitez indexer, pas Item1
. Item1
est simplement une valeur sur un objet donné de la collection people
. Donc, vous feriez quelque chose comme ça:
for (int i = 0; i < people.Count; i++)
{
Console.WriteLine(people[i].Item1); //the int
Console.WriteLine(people[i].Item2); //the string
Console.WriteLine(people[i].Item3); //the int
}
En passant, je vous recommande fortement de créer un objet réel contenant ces valeurs au lieu de Tuple
. Cela rend le reste du code (tel que cette boucle) beaucoup plus clair et facile à utiliser. Cela pourrait être quelque chose d'aussi simple que:
class Person
{
public int ID { get; set; }
public string Name { get; set; }
public int SomeOtherValue { get; set; }
}
Ensuite, la boucle est grandement simplifiée:
foreach (var person in people)
{
Console.WriteLine(person.ID);
Console.WriteLine(person.Name);
Console.WriteLine(person.SomeOtherValue);
}
Nul besoin de commentaires expliquant la signification des valeurs à ce stade, les valeurs elles-mêmes vous expliquent ce qu’elles signifient.
Est-ce tout ce que vous cherchez?
for (int i = 0; i < people.Count; i++)
{
Console.WriteLine(people[i].Item1);
Console.WriteLine(people[i].Item2);
Console.WriteLine(people[i].Item3);
}
ou en utilisant une foreach
:
foreach (var item in people)
{
Console.WriteLine(item.Item1);
Console.WriteLine(item.Item2);
Console.WriteLine(item.Item3);
}
Vous devez changer où est votre indexeur, vous devez le mettre comme ceci:
for (int i = 0; i < people.Count; i++)
{
Console.WriteLine(people[i].Item1); //the int
Console.WriteLine(people[i].Item2); //the string
Console.WriteLine(people[i].Item3); //the int
}
Voilà!!
Essaye ça:
for (int i = 0; i < people.Count; i++)
{
Console.WriteLine(people[i].Item1); //the int
Console.WriteLine(people[i].Item2); //the string
Console.WriteLine(people[i].Item3); //the int
}
Vous devez reculer un peu l'indexeur:
for (int i = 0; i < people.Count; i++)
{
Console.WriteLine(people[i].Item1); //the int
Console.WriteLine(people[i].Item2); //the string
Console.WriteLine(people[i].Item3); //the int
}
class Ctupple
{
List<Tuple<int, string, DateTime>> tupple_list = new List<Tuple<int, string, DateTime>>();
public void create_tupple()
{
for (int i = 0; i < 20; i++)
{
tupple_list.Add(new Tuple<int, string, DateTime>(i, "Dump", DateTime.Now));
}
StringBuilder sb = new StringBuilder();
foreach (var v in tupple_list)
{
sb.Append(v.Item1);
sb.Append(" ");
sb.Append(v.Item2);
sb.Append(" ");
sb.Append(v.Item3);
sb.Append(Environment.NewLine);
}
Console.WriteLine(sb.ToString());
int j = 0;
}
public void update_tupple()
{
var vt = tupple_list.Find(s => s.Item1 == 10);
int index = tupple_list.IndexOf(vt);
vt = new Tuple<int, string, DateTime>(vt.Item1, "New Value" , vt.Item3);
tupple_list.RemoveAt(index);
tupple_list.Insert(index,vt);
StringBuilder sb = new StringBuilder();
foreach (var v in tupple_list)
{
sb.Append(v.Item1);
sb.Append(" ");
sb.Append(v.Item2);
sb.Append(" ");
sb.Append(v.Item3);
sb.Append(Environment.NewLine);
}
Console.WriteLine(sb.ToString());
}
}