C#: Alternative zu List<Tuple<.>>

Gast #4010905
Lesenswert?
• ▲
▼
Hallo,

in einer Anwendung werden Daten in eine Liste, immer wieder aktualisiert 
bzw. gespeichert.
1
List<Tuple<string, long, int, long>> _Table = new List<Tuple<string, long, int, long>>();

Nun ist es so, dass wenn eine Wert neu abgelegt werden soll zunächst 
alle Werte in eine Zwischenvariable gespeichert müssen und im Anschluss 
können der Liste _Table die Werte übergeben werden. Es ist nicht möglich 
einzelne Werte zu ändern. Gibt es in C# eine Alternative hierfür?
1
string v1 = _Table[i].Item1;
2
long v2  = _Table[i].Item2;
3
int v3 = _Table[i].Item3;
4
long v4 = _Table[i].Item3;
5

6
_Table[i] = Tuple.Create(v1, v2, v3, v4);
Gast #4010925
Lesenswert?
• ▲
▼
Ich würde einen eigenen Typ mit den vier Properties erstellen.

Es geht aber auch mit dynamic und dem ExpandoObject:
1
            dynamic d = new ExpandoObject();
2
            d.Text = "abc";
3
            d.Vau2 = 123L;
4
            d.Vau3 = 456;
5
            d.Vau4 = 789L;
6

7
            string text = d.Text;
8
            long v2 = d.Vau2;
9
            int v3 = d.Vau3;
10
            long v4 = d.Vau4;

Allerdings gibt es da kein IntelliSense... ;)
Gast #4010991
Lesenswert?
• ▲
▼
Warum nicht, wenn die Listenelemente alle vom selben Typ sind?
1
    List<MeinTyp> list = new List<MeinTyp>();
2
    list.Add(new MeinTyp() { Text = "abc", Vau2 = 123L, Vau3 = 456, Vau4 = 789L });
3
    list.Add(new MeinTyp() { Text = "abc", Vau2 = 123L, Vau3 = 456, Vau4 = 789L });
4

5
    list[1].Vau2 = 987L;
Gast #4011021
Lesenswert?
• ▲
▼
1
        public struct MyStruct
2
        {
3
            private int x;
4
            private int y;
5

6
            public int X { get { return x; } set { x = value; } }
7
            public int Y { get { return y; } set { y = value; } }
8
        }
9

10
        List<MyStruct> list = new List<MyStruct>();
11

12
        list.Add(new MyStruct() { X = 1, Y = 2});
13
        list.Add(new MyStruct() { X = 3, Y = 5});
14

15
        list[1].Y = 9;

Wert lässt sich nicht ändern. Meldung Visual Studio:
Der Rückgabewert 
"System.Collections.Generic.List<PingTool.FormPingTool.MyStruct>.this[in 
t]"  kann nicht geändert werden, da er keine Variable ist.
Gast #4011042
Lesenswert?
• ▲
▼
MyStruct muss eine Klasse sein. Von structs wird immer eine Kopie 
gemacht, wenn du über den Indexer drauf zugeifst. Du änderst also Y in 
der Kopie. Und mit der nächsten Zeile ist deine Änderung verloren. Du 
könntest den struct erst in eine Variable speichern, dort ändern und 
dann wieder an der entsprechenden Stelle in die Liste bringen.
Einfacher ist es, eine Klasse zu nehmen. Das Objekt gibt es einmal und 
du greifst über die Referenz darauf zu.
So gehts:
1
    public class MyStruct
2
    ...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren