webentwicklung-frage-antwort-db.com.de

Holen Sie sich ein bestimmtes Element aus der Liste der Tupel c #

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       
        }
20
Wayneio

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
20
voithos

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.

10
David

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);
}
3
Tim

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 !!

2
Dozer789

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       
    }
1
Daniel Möller

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       
}
1
It'sNotALie.
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());
    }

}
0
Saurabh