Ich habe eine Liste von Tupeln:
List<Tuple<int, string, int>> people = new List<Tuple<int, string, int>>();
Mit einer dataReader
kann ich diese Liste mit verschiedenen Werten füllen:
people.Add(new Tuple<int, string, int>(myReader.GetInt32(4), myReader.GetString(3), myReader.GetInt32(5)));
Aber wie gehe ich durch, bekomme jeden einzelnen Wert. Ich möchte zum Beispiel die 3 Details für eine bestimmte Person lesen. Nehmen wir an, es gibt eine ID, einen Namen und eine Telefonnummer. Ich möchte etwas wie das Folgende:
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
ist eine Liste, also indexieren Sie die Liste first und können dann auf das gewünschte Element verweisen.
for (int i = 0; i < people.Count; i++)
{
people[i].Item1;
// Etc.
}
Denken Sie nur an die Typen , mit denen Sie arbeiten, und diese Art von Fehlern wird selten sein.
people; // Type: List<T> where T is Tuple<int, string, int>
people[i]; // Type: Tuple<int, string, int>
people[i].Item1; // Type: int
Sie indizieren das falsche Objekt. people
ist das zu indizierende Array, nicht Item1
. Item1
ist einfach ein Wert für ein beliebiges Objekt in der people
-Auflistung. Du würdest so etwas tun:
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
}
Nebenbei empfehle ich dringend, dass Sie ein tatsächliches Objekt erstellen, das diese Werte anstelle einer Tuple
enthält. Dadurch wird der Rest des Codes (wie diese Schleife) viel klarer und einfacher zu handhaben. Es könnte so einfach sein wie:
class Person
{
public int ID { get; set; }
public string Name { get; set; }
public int SomeOtherValue { get; set; }
}
Dann ist die Schleife stark vereinfacht:
foreach (var person in people)
{
Console.WriteLine(person.ID);
Console.WriteLine(person.Name);
Console.WriteLine(person.SomeOtherValue);
}
Es sind keine Kommentare erforderlich, die erklären, was die Werte an dieser Stelle bedeuten. Die Werte selbst sagen Ihnen, was sie bedeuten.
Ist das alles, nach dem Sie suchen?
for (int i = 0; i < people.Count; i++)
{
Console.WriteLine(people[i].Item1);
Console.WriteLine(people[i].Item2);
Console.WriteLine(people[i].Item3);
}
oder mit einer foreach
:
foreach (var item in people)
{
Console.WriteLine(item.Item1);
Console.WriteLine(item.Item2);
Console.WriteLine(item.Item3);
}
Sie müssen ändern, wo sich Ihr Indexierer befindet.
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
}
Da gehts !!
Versuche dies:
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
}
Sie müssen den Indexer etwas zurückschieben:
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());
}
}