Laden...

Strukturkomponenten ändern, wenn die Strukturen Array-Element sind

Erstellt von digi333 vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.556 Views
D
digi333 Themenstarter:in
290 Beiträge seit 2006
vor 15 Jahren
Strukturkomponenten ändern, wenn die Strukturen Array-Element sind

public struct ObjValues
        {
            private string value;
            private int count;
            private string desc;

            public string Value
            {
                get { return this.value; }
                set { this.value = value; }
            }

            public int Count
            {
                get { return this.count; }
                set { this.count = count; }
            }

            public string Desc
            {
                get { return this.desc; }
                set { this.desc = desc; }
            }
        }


...

List<ObjValues> list = new List<ObjValues>();
list.Add(new ObjValues { Value = "test", Count = 0, Desc = "test" });
list[0].Count++;

In der letzten Zeile meckert er "can not modify...". Wie würde man dies richtig machen?

4.207 Beiträge seit 2003
vor 15 Jahren

Müsste das nicht this.count = value heißen? Analog auch this.desc = value?

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

W
123 Beiträge seit 2008
vor 15 Jahren

Hallo,

das gibt einen Fehler CS1612. Dazu steht in der MSDN:

An attempt was made to modify a value type that was the result of an intermediate expression. Because the value is not persisted, the value will be unchanged.

Du müsstest also eine Hilfsvariable anlegen:


ObjValues o = list[0];
o.Count++;

Gruß
wolpertinger

D
digi333 Themenstarter:in
290 Beiträge seit 2006
vor 15 Jahren

Leider bleibt aber der Inhalt von Count gleich bei "0". Was nun?

D
78 Beiträge seit 2007
vor 15 Jahren

Du müsstest also eine Hilfsvariable anlegen:

Und wieder zurückschreiben...

53 Beiträge seit 2008
vor 15 Jahren

Kann natürlich sein das ich grad aufgrund meiner asynchron laufenden Gehirnhälften falsch denke, aber ich glaube das das so noch nicht richtig ist.

Wenn ich das oben richtig verstehe willst du den Count, der Member eines Value-Types ist, in einer Liste erhöhen?

Bei der Hilfszuweisung wird der Value-Type aber kopiert. Somit sollte nach dem Count++ in der Liste immer noch der alte Count stehen.

Richtig wäre meiner Meinung nach:


ObjValues o = list[0];
o.Count++;
list[0] = o;

Gruß
ryoshi

D
78 Beiträge seit 2007
vor 15 Jahren

Richtig wäre meiner Meinung nach:

  
ObjValues o = list[0];  
o.Count++;  
list[0] = o;  
  

Korrekt!

D
digi333 Themenstarter:in
290 Beiträge seit 2006
vor 15 Jahren

Aber o.Count bleibt nach erhöhen bei "0". was nu?

D
78 Beiträge seit 2007
vor 15 Jahren

Aber o.Count bleibt nach erhöhen bei "0". was nu?

Siehe oben! :p

D
digi333 Themenstarter:in
290 Beiträge seit 2006
vor 15 Jahren

Aber o.Count bleibt nach erhöhen bei "0". was nu?

Siehe oben! :p

Der Code ist jetzt so wie bei euch, aber nach der Zeile o.Count++; Ist der Wert immer noch "0"

D
78 Beiträge seit 2007
vor 15 Jahren

Dann schau nochmal was "Golo Roden" geschrieben hat...

D
digi333 Themenstarter:in
290 Beiträge seit 2006
vor 15 Jahren

sorry... das war es

F
10.010 Beiträge seit 2004
vor 15 Jahren

Oder eben aufhören Structs zu benutzen, solange man nicht genau weiss, wie das
alles zusammenhängt.

Mit class statt struct ginge es auf anhieb.

4.207 Beiträge seit 2003
vor 15 Jahren

Auch mit class wäre es nicht gegangen, ohne dass er value hinschreibt ...

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de