11 Stimmen

Zuweisung von Feldern/Eigenschaften in einer Struktur

Mögliches Duplikat:
Strukturvariable in einem Dictionary ändern

Warum ist es so, dass

  MyStruct test = new MyStruct();
  test.Closed = true;

Funktioniert prima, aber

MyDictionary[key].Closed = true;

Zeigt einen "Cannot modify the expression because it is not a variable"-Fehler zur Kompilierungszeit?

Was ist an der Zuordnung in diesen beiden Fällen anders?

Note : MyDictionary ist vom Typ <int, MyStruct>

Code für die Struktur:

public struct MyStruct
{
    //Other variables
    public bool Isclosed;
    public bool Closed
    {
        get { return Isclosed; }
        set { Isclosed = value; }
    }
//Constructors
}

15voto

Keith Punkte 19677

Denn MyDictionary[key] eine Struktur zurückgibt, gibt sie in Wirklichkeit eine kopieren. des Objekts in der Sammlung, nicht das eigentliche Objekt, wie es bei der Verwendung einer Klasse der Fall ist. Davor warnt Sie der Compiler.

Um dieses Problem zu umgehen, müssen Sie Folgendes neu einstellen MyDictionary[key] vielleicht so:

var tempObj = MyDictionary[key];
tempObj.Closed = true;
MyDictionary[key] = tempObj;

1voto

Tono Nam Punkte 31244

Ändern Sie die Struktur stattdessen in eine Klasse...

class Program
{
    static void Main(string[] args)
    {
        dic = new Dictionary<int, MyStruct>();

        MyStruct s = new MyStruct(){ Isclosed=false};

        dic.Add(1,s);

        dic[1].Isclosed = true;

        Console.WriteLine(dic[1].Isclosed.ToString()); //will print out true...
        Console.Read();
    }

    static Dictionary<int, MyStruct> dic;

    public class MyStruct
    {
        public bool Isclosed;
        public bool Closed
        {
            get { return Isclosed; }
            set { Isclosed = value; }
        }
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X