Laden...

Aktualisieren einer Eigenschaft eines Objekts

Erstellt von baseLine vor 4 Jahren Letzter Beitrag vor 4 Jahren 967 Views
B
baseLine Themenstarter:in
7 Beiträge seit 2017
vor 4 Jahren
Aktualisieren einer Eigenschaft eines Objekts

Hallo zusammen,

ich möchte eine Personenliste erstellen. Dazu möchte ich im Falle einer Änderung die alten Daten behalten.

Folgende Idee hatte ich, die allerdings in einer NullReferenzException endet:#


namespace Test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            
            List<Person> personenliste = new List<Person>();
            Person person = new Person();

            person.Name = "NeuerName";
            personenliste.Add(person);

            personenliste[0].Verlauf[0].Name = "AlterName";
        }
    }

    public class Person
    {
        public string Name { get; set; }
        public Person[] Verlauf { get; set; }
    }
}

auch folgender Versuch schlägt fehl:

person.Verlauf.SetValue(person, 1);

wie bekomme ich denn den aktuellen Namen in den "Verlauf" kopiert?

Danke vorab.

Hinweis von Abt vor 4 Jahren

Bitte beachte in Zukunft [Hinweis] Wie poste ich richtig?
2.1 Im richtigen Forum posten
3. Aussagekräftigen Titel wählen

301 Beiträge seit 2009
vor 4 Jahren
public Person[] Verlauf { get; set; }

Du erstellst ja auch keine Instanz von dem Array

B
baseLine Themenstarter:in
7 Beiträge seit 2017
vor 4 Jahren

Hey,

danke für Deine Antwort,

aber wie soll ich von diesem Array eine Instanz erstellen?

Person[] ver = new Person[6];

klappt zwar, aber wenn ich dann den Namen zuweisen will

ver[0].Name = "Hallo";

endet das wieder in einer NullReference.

2.298 Beiträge seit 2010
vor 4 Jahren

Hallo,

am einfachsten wird es wenn du deine Personenklasse weiter aufdröselst.

Wie wäre es mit etwas wie folgendem:


public class Person
{
    private string _name;
    public string Name
    {
        get { return this._name; }
        set 
        {
             if(this._name == value)
                  return;
             
             this.UpdateName(value);
        }
    }

    private List<Person> _verlauf = new List<Person>();

    public Person[] Verlauf => this._verlauf.ToArray();

    private void UpdateName(string newName)
    {
          this._verlauf.Add(new Person{
               Name = this.Name
          });

          this.Name = newName;
    }
}


Ist ungetestet und nur mal eben aufgelistet wie es sich wohl am einfachsten bewerkstelligen liese.

Dein eigentliches Problem jedoch ist, dass du ja keine neue Personen-Instanz zum Array hinzufügst sondern tatsächlich nur ein Array mit NULL-Werten erzeugt hast.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

16.834 Beiträge seit 2008
vor 4 Jahren

endet das wieder in einer NullReference.

Wenn Du das mit den Referenzen nicht verstehst, dann schau Dir nochmal an, wie C# funktioniert und was OOP ist.
[FAQ] Wie finde ich den Einstieg in C#?

Es bringt Dir nichts, wenn Dir hier jemand Dein Quellcode korrigiert, aber Du die Ursache nicht verstehst.
Und das sind ganz ganz frühe C# Basics 😃

Ansonsten auch:
[FAQ] NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt
[Artikel] Debugger: Wie verwende ich den von Visual Studio?

Wenn das sowas wie "Undo" werden soll, dann gibts dafür den Momento-Pattern.