Steh auf dem Schlauch ​ich bekomm ein System.NullReferenceException aber warum (List<> als Property in einer Klasse)?

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von nogood.

    Steh auf dem Schlauch ​ich bekomm ein System.NullReferenceException aber warum (List<> als Property in einer Klasse)?

    Gute Nacht,

    Ich steh gerade auf dem Schlauch und sehe wahrscheinlich den Wald vor lauter Bäumen nicht aber was/wo instanziiere ich nicht richtig?
    Mein "Main":

    C#-Quellcode

    1. ...
    2. using System.Windows.Forms;
    3. namespace WinFormsDataModelIniLst
    4. {
    5. public partial class Form1 : Form
    6. {
    7. public Form1()
    8. {
    9. InitializeComponent();
    10. DataModel dataModelObj = new DataModel();
    11. TModel tModelObj = new TModel("TestName");
    12. dataModelObj.Count = 500;
    13. dataModelObj.LstOfTModels.Add(tModelObj);
    14. RtxbxShow.Text += $"DataModelCount: {dataModelObj.Count}\n";
    15. foreach (var item in dataModelObj.LstOfTModels)
    16. {
    17. RtxbxShow.Text += item.Name;
    18. }
    19. }
    20. }
    21. }


    16. Zeile im Main Code -> Fehler
    Text:System.NullReferenceException:
    'Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.'WinFormsDataModelIniLst.DataModel.LstOfTModels.get returned null.

    Meine Klassen:

    C#-Quellcode

    1. namespace WinFormsDataModelIniLst
    2. {
    3. public class DataModel
    4. {
    5. public int Count { get; set; }
    6. public List<TModel> LstOfTModels { get; set; }
    7. public DataModel() {}
    8. }
    9. public class TModel
    10. {
    11. public string Name { get; set; }
    12. public TModel(string name)
    13. {
    14. Name = name;
    15. }
    16. }
    17. }


    Wie muss ich meine Liste instaziieren damit ich sie benutzen kann? Danke für Eure Hilfe!
    codewars.com Rank: 4 kyu
    In Codeblock#2, Zeile#6 gibst Du ja nur bekannt, dass es sowas gibt. Du deklarierst die Liste. Dadurch erzeugst Du sie aber nicht. Entweder Du schreibst:
    public List<TModel> LstOfTModels { get; set; } = new List<TModel>();
    oder eben später:

    C#-Quellcode

    1. DataModel Model = new DataModel();
    2. Model.LstOfTModels = new List<TModel>();

    (müsste so passen, bin nicht fit in C#)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed Jou.
    @nogood Ich würde das so machen:

    C#-Quellcode

    1. public class DataModel
    2. {
    3. public int Count { get; set; }
    4. public List<TModel> LstOfTModels { get; private set; }
    5. public DataModel()
    6. {
    7. this.LstOfTModels = new List<TModel>();
    8. }
    9. }
    Es macht wahrscheinlich keinen Sinn, die List von außen instanziieren zu können.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @VaporiZed Thx! Ja ist richtig. Danke Dir vielmals!
    @RodFromGermany Super genau so ist die Lösung. Klar hab ich das schon häufiger in Code gesehen, aber irgenwie hab ich nicht dran gedacht. Danke für Deine Hilfe!

    :thumbsup:
    codewars.com Rank: 4 kyu

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „nogood“ ()