Laden...

Der Rückgabewert kann nicht geändert werden, da er keine Variable ist.

Erstellt von aime2code vor 12 Jahren Letzter Beitrag vor 12 Jahren 2.883 Views
Thema geschlossen
A
aime2code Themenstarter:in
49 Beiträge seit 2007
vor 12 Jahren
Der Rückgabewert kann nicht geändert werden, da er keine Variable ist.

Hallo Leute,

habe vor kurzem erst erfahren, dass man ab C# 3 die Felder noch viel kürzer und einfacher kapseln kann, nämlich:

public String MeinText { get; set; }

Ich denke das brauche ich hier keinem erklären ...

Mein Problem ist jetzt nun, dass ich auf eine so gekapselte Struktur nicht mehr vernünftig zugreifen kann.

public class Class1
    {
        public MyStruct Props { get; set; }
        private MyStruct props;

        public Class1()
        {
            Props.MyProp = 7;
            props.MyProp = 5;
        }
    }

Die erste Zeile im Konstruktor macht Probleme:

Props.MyProp = 7;

Fehlermeldung:
Der Rückgabewert "ClassLibrary1.Class1.Props" kann nicht geändert werden, da er keine Variable ist.


namespace ClassLibrary1
{
  public struct MyStruct
    {
        public int MyProp { get; set; }
    }


    public class Class1
    {
        public MyStruct Props { get; set; }
        private MyStruct props;

        public Class1()
        {
            Props.MyProp = 7;
            props.MyProp = 5;
        }
    }
}

Klärt mich bitte auf 🙁

Im Anhang ist das ganze klitzekleine Projekt.

Hinweis von Abt vor 12 Jahren

Bitte keine ganzen Projekte anhängen. Ich hab die relevanten Code-Stellen in den Beitrag eingefügt.

F
10.010 Beiträge seit 2004
vor 12 Jahren

Es ist immer noch so, das du ein Objekt erst erzeugen musst, bevor du drauf zugreifen kannst.


public class Class1
    {
        public MyStruct Props { get; set; }

        public Class1()
        {
            Props = new MyStruct();
            Props.MyProp = 7;
            props.MyProp = 5;
        }
    }

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo aime2code,

siehe [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen)

Es wurde im Forum schon 1000fach besprochen, warum das nicht geht und wie man Felder einer Struktur ändern kann, wenn man auf die Struktur nur Zugriff über eine Property hat. Kurz gesagt: die Struktur komplett abrufen, ändern und komplett zurückschreiben.

Das ist übrigens nicht erst seit C# 3 so und hat auch nichts damit zu tun, dass die Properties automatisch sind, sondern es ist seit Anfang an so.

Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 1.1.1 und 1.1.

herbivore

Thema geschlossen