Struct ist Member von Type, aber Member von Struct kann nicht überschrieben werden

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Kagurame.

    Struct ist Member von Type, aber Member von Struct kann nicht überschrieben werden

    Hi,

    ich habe folgendes problem:

    Ich habe einen Typ, welcher einen vorher definierten Struct hält.
    Der Struct hat natürlich auch Member.

    Möchte ich nun bei der Instanz meines Typs einen member des Structs überschreiben, bekomme ich folgende meldung:

    Expression is a value and therefore cannot be the target of an assignment


    Dieses problem ist Redundant zu diesem hier, welches ich gegoogelt habe:

    Link zu MSDN Social

    Die dort angegebene Lösung funktioniert auch bei mir, nur scheint es mir ein wenig umständlich. Gibt es dort einfacheren und schöneren Weg, unter der Vorraussetzung, den Struct zu behalten?

    Spoiler anzeigen

    VB.NET-Quellcode

    1. <DataContract()>
    2. <Serializable()>
    3. Public Structure UserSettings
    4. ' Betroffener Member
    5. <DataMember(IsRequired:=True)>
    6. Public Property KeySetting As String
    7. <DataMember(IsRequired:=True)>
    8. Public Shared ReadOnly [Default] As UserSettings
    9. End Structure
    10. ' Function an anderer Stelle:
    11. Dim retVal As New ManagerResultBase(Of UserSettings) 'ManagerResult hält eine Instanz eines anderen Typs sowie einen Member Of T
    12. ' So funktioniert es:
    13. Dim settingCopy As UserSettings = retVal.ManagerResponse 'Managerresponse ist der mit dem Typ T initialisierte Wert
    14. settingCopy.KeySetting = GetValueOrDefault(dv, "KeySettings", defaultUs.KeySetting) 'StringValue der Zugewiesen werden soll
    15. retVal.ManagerResponse = settingCopy
    16. 'SO funktioniert es nicht:
    17. retVal.ManagerResponse.KeySetting = GetValueOrDefault(dv, "KeySettings", defaultUs.KeySetting) 'GetValueOrDefault gibt einen String-Value zurück

    Kagurame schrieb:

    Möchte ich nun bei der Instanz meines Typs einen member des Structs überschreiben

    das geht halt nicht, so ist eben das Wesen einer Structure, im Unterschied zur Class.

    Du kannst die Struct komplett austauschen, aber nicht einen Member der Struct. Denn auf die Struct zugreifen bedeutet sie kopieren, und wenn du an der Struct-Kopie einen Member änderst, kümmert das deinen Typen herzlich wenig.