Dim .. as List(of String) Fehler

  • VB.NET
  • .NET (FX) 4.0

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von BeatsleigherXDA.

    Dim .. as List(of String) Fehler

    Bei Folgendem Code bekomme ich diese Fehlermeldung: "System.NullReferenceException: Object reference not set to an instance of an object."

    VB.NET-Quellcode

    1. Dim Mitarbeiter As List(Of String)
    2. Mitarbeiter.Add("Hans")


    Die Fehlermeldung erscheint bei Mitarbeiter.Add("Hans")

    Ich weiß nur nicht warum.
    Könnt ihr mir sagen was ich falsch mache?
    Weil Klassen instanziiert werden müssen? Gugge New.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Wie Trade schon richtig gesagt hatte, musst du zunächst eine Instanz der Klasse List(Of String) erstellen, dies geschieht mit dem Schlüsselwort

    VB.NET-Quellcode

    1. New


    In einem Sub kann das zb. so aussehen:

    VB.NET-Quellcode

    1. Private Sub ErstelleListe()
    2. Dim Mitarbeiter As New List(Of String)
    3. Mitarbeiter.Add("Hans")
    4. ' ausgeben
    5. For Each s As String In Mitarbeiter
    6. MessageBox.Show(s)
    7. Next
    8. End Sub

    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..

    Rootbob91 schrieb:

    In einem Sub kann das zb. so aussehen:

    Na toll, Lerneffekt = 0 dank Abschreiben.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Der Grund wurde jetzt 2 mal erklärt, ein Beispiel womit er nun etwas Anfangen kann geliefert und falls noch bedarf besteht kann er fragen oder suchen. Das bleibt dann Ihm überlassen und da es jetzt nicht gerade die Welt an Code ist passt das meiner Meinung nach so.
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
    Hmm - ein hingeschmissenes "Gugge New" würde ich nicht als Erklärung bezeichnen, und ob der TE sich unter "instanziieren" was vorstellen kann bezweifel ich auch.

    Fehlen halt massiv Grundlagen, die Begriffe Deklarieren, Instanzieren und das Schlüsselwort New müssten erklärt werden.

    also kurz: "Instanzieren" heisst "erstellen", und dabei wird ein neues (new) Objekt des angegebenen Typs (hier: List(of String)) erstellt.
    Der TE hat eine Variable nur deklariert, ihr aber kein gültiges Objekt zugewiesen. Genau das sagt die Exception.
    Die Variable enthält also keine List(Of String), sondern sie enthält das Nothing-Objekt, und dem kann man nix adden.
    gugge auch Exceptions, und was sie uns sagen wollen

    Rootbob91 verwendet die verkürzte kombinierte Schreibweise, bei der Deklaration, Instanzierung (mit New) und Zuweisung der instanzierten List(of String) in einer Zeile notiert werden kann.

    Zum Schlüsselwort New gugge msdn.microsoft.com/de-de/library/77s47661%28v=vs.100%29.aspx
    Da sollte man überhaupt mal so ungefähr jedes Schlüsselwort sich angeguckt haben - da gibts immer wieder Feinheiten, die man noch nicht gewusst hat.

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

    VB.NET-Quellcode

    1. Public Class Employee
    2. #Region ""
    3. Public Property firstName() As [String]
    4. Get
    5. Return m_firstName
    6. End Get
    7. Set
    8. m_firstName = Value
    9. End Set
    10. End Property
    11. Private m_firstName As [String]
    12. Public Property lastName() As [String]
    13. Get
    14. Return m_lastName
    15. End Get
    16. Set
    17. m_lastName = Value
    18. End Set
    19. End Property
    20. Private m_lastName As [String]
    21. Public Property startedWorking() As DateTime
    22. Get
    23. Return m_startedWorking
    24. End Get
    25. Set
    26. m_startedWorking = Value
    27. End Set
    28. End Property
    29. Private m_startedWorking As DateTime
    30. Public Property salary() As Double
    31. Get
    32. Return m_salary
    33. End Get
    34. Set
    35. m_salary = Value
    36. End Set
    37. End Property
    38. Private m_salary As Double
    39. #End Region
    40. Public Sub New()
    41. End Sub
    42. Public Sub New(firstName As String, lastName As String, startedWorking As Datetime, salary As Double)
    43. Me.firstName = firstName
    44. Me.lastName = lastName
    45. Me.startedWorking = startedWorking
    46. Me.salary = salary
    47. End Sub
    48. End Class
    49. Public Class YourClass
    50. Private listOfEmployees As List(Of Employee)
    51. Public Sub New()
    52. listOfEmployees = New List(Of Employee)()
    53. End Sub
    54. Private Sub addEmployee(firstName As String, lastName As String, startedWorking As DateTime, salary As Double)
    55. listOfEmployees.Add(New Employee(firstName, lastName, startedWorking, salary))
    56. End Sub
    57. End Class


    Das wäre so dein Ansatz. Der Rest wäre dann dir überlegen.
    "Nichts ist unendlich, bis auf die menschliche Dummheit" - Albert Einstein
    "Man sollte nicht alles vertrauen, was im Netz steht" - Abraham Lincoln

    BeatsleigherXDA schrieb:

    VB.NET-Quellcode

    1. Public Property firstName() As [String]
    2. Get
    3. Return m_firstName
    4. End Get
    5. Set
    6. m_firstName = Value
    7. End Set
    8. End Property
    9. Private m_firstName As [String]
    würde ich ab 4.0 schreiben als

    VB.NET-Quellcode

    1. Public Property firstName() As String
    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!
    @BeatsleigherXDA Was mir noch auffällt ist UpperCamelCase bei Methoden und Eigenschaften, was nicht den Guidelines entspricht.
    Außerdem finde ich persönlich Arraydeklarierung nach dem Typen schöner als statt dem Namen.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    @Trade Das werde ich niemals wieder in mich rein kriegen. Es sieht so unnatürlich und komisch aus. Ich habe das so von C/C++ und Java übernommen. Ich mache das in meinem C#-Code genau so.
    "Nichts ist unendlich, bis auf die menschliche Dummheit" - Albert Einstein
    "Man sollte nicht alles vertrauen, was im Netz steht" - Abraham Lincoln
    C++ wird aber auch nicht so notiert. Grade wenn es Guidelines für soetwas gibt, dann muss man sich auch daran halten. Generell sollte man sich an die RT-Bibliothek einer Sprache wenden. Der Vorteil ist nämlich dann, dass alles einheitlich und übersichtlich wirkt. Auch wenn man persönlich Anderes gewöhnt ist, sollte man sich daran halten. Sieht ansonsten einfach blöd aus.
    @Gonger96 Natürlich verwendet C++ camelCase für Methoden, Variablen und so weiter (außer Klassen):

    C-Quellcode

    1. class MainWindow : public QMainWindow
    2. {
    3. Q_OBJECT
    4. public:
    5. MainWindow();
    6. public slots:
    7. void setFontSize(int size);
    8. void setMonth(int month);
    9. void setYear(QDate date);
    10. private:
    11. void insertCalendar();
    12. int fontSize;
    13. QDate selectedDate;
    14. QTextBrowser *editor;
    15. };
    "Nichts ist unendlich, bis auf die menschliche Dummheit" - Albert Einstein
    "Man sollte nicht alles vertrauen, was im Netz steht" - Abraham Lincoln

    BeatsleigherXDA schrieb:

    Es sieht so unnatürlich und komisch aus.

    Und das sage ich zu UpperCamelCase. :P
    Es ist halt imo nicht grade so schön, wenn ich jetzt das .NET-Framework habe, darin jede Menge Klassen mit Methoden und Eigenschaften, alle groß und dann ne Lib, wo es auf einmal klein ist. Das sieht nicht gut und nicht einheitlich aus.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    @ErfinderDesRades Ah. Jetzt hab ich's auch gesehen.

    @Trade Wie gut, dass ich keine Libs für .NET mehr mache :p Ich kriege nämlich schon einen kalten Schauer über den Rücken, wenn ich die PascalCase-Member in anderen Libs sehe.

    Ist jetzt aber auch egal; wir programmieren eh alle, wie es für uns am Besten ist. Der Eine nur camelCase, der Andere nur PascalCase und der andere Andere macht sein eigenes Ding.
    "Nichts ist unendlich, bis auf die menschliche Dummheit" - Albert Einstein
    "Man sollte nicht alles vertrauen, was im Netz steht" - Abraham Lincoln