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?
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
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
Du müsstest also eine Hilfsvariable anlegen:
Und wieder zurückschreiben...
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
Richtig wäre meiner Meinung nach:
ObjValues o = list[0]; o.Count++; list[0] = o;
Korrekt!
Aber o.Count bleibt nach erhöhen bei "0". was nu?
Siehe oben! :p
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"
Dann schau nochmal was "Golo Roden" geschrieben hat...
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.
Auch mit class wäre es nicht gegangen, ohne dass er value hinschreibt ...
Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden