Ein Element mit dem gleichen Schlüssel wurde bereits hinzugefügt.

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von darKo.

    Ein Element mit dem gleichen Schlüssel wurde bereits hinzugefügt.

    Hallo Leute,

    ich habe ein kleines Problem, und zwar bekomme ich die ganze Zeit eine Fehlermeldung. Habe schon Stunden damit verbracht, erfolglos danach zu recherchieren.
    Einer von euch vielleicht ne Ahnung? :/



    Viele Grüße
    Ich kann das bild nicht in meine IDE einfühgen. ;(
    Poste doch bitte den Code im Textformat und von dem passenden BB-Code-Tag umschlossen.
    Baselink und Username sind beide ein leerer String und da Configuration so etwas wie ein Dictionary zu sein scheint, fügst du einen leeren Schlüssel 2x hinzu was nicht erlaubt ist. Am besten du setzt mal einen Haltepunkt und überprüfst ob Baselink und Username gefüllt sind.
    @petaod

    VB.NET-Quellcode

    1. Public Class configuration
    2. Private dict As New Dictionary(Of String, Object)
    3. Public Sub Add(key As String, value As Object)
    4. dict.Add(key, value)
    5. End Sub
    6. Public Function Item(key As String) As Object
    7. If dict.ContainsKey(key) Then
    8. Return dict.Item(key)
    9. End If
    10. Return Nothing
    11. End Function
    12. Public Function get_all() As Dictionary(Of String, Object)
    13. Return dict
    14. End Function
    15. End Class


    & nein baselink, username und password sind keine leeren Strings
    Wenn die Fehlermeldung kommt, bleibt das Programm stehen. Dann kann man doch problemlos reinschauen, was in den Werten drinsteht, welche ins Dict aufgenommen werden sollen und welche im dict schon drinstehen. Dann sollte sich das Rätsel doch sehr schnell lösen lassen. Ich versteh die Schwierigkeit nicht.

    EDIT: ThuCommix war da wohl schneller.
    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.
    Ihr seid ja alle so schlau, warum bin ich da nicht selber drauf gekommen. ^^
    Spaß, glaubt ihr nicht dass hab ich schon längst gemacht? Wenn es so einfach wäre, hätte ich nicht diesen Thread eröffnet.

    In userName steht wie gewollt der Username, er wird aber nicht hinzugefügt, keine Ahnung warum und im dict steht er auch noch nicht.
    In Deinem Screenshot steht Public Const username As String = ""
    Wie kann er je was anderes als ein Leerstring sein? Genauso baselink
    Und wenn beide Leerstrings sind, sind sie - eingesetzt als dict-Key - gleich; und somit nicht verwertbar
    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.
    Das dict wird ja zuerst neu angelegt und dann (warum auch immer das notwendig sein sollte) durch config.get_all.clear() geleert, s. Screenshot, 2 Zeilen über der Fehlerzeile. (Möge der Screenshot den aktuellen Code noch zeigen). Es dürfte also nix drinstehen. Wenn allerdings beide key-Strings als konstant und als Leerstring festgelegt sind, dann … ach, Moment. Ich wiederhole mich.
    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.
    Also baseLink und userName sind am Anfang leer, weil noch nichts in der Datenbank steht, aber ich versuch ja per

    VB.NET-Quellcode

    1. ​config.Add(baseLink, txt_Link.Text)
    baseLink den Wert von

    VB.NET-Quellcode

    1. txt_Link.Text
    zu zuweisen.

    Ich glaube ich denk gerade falsch, weil ich schon zu lange an dem Projekt arbeite, sorry.
    Zuweisung und Dictionary-Eintrag sind aber 2 Paar Stiefeletten.
    Zuweisung: baseLink = txt_Link.Text
    config.Add(baseLink, txt_Link.Text): neuen Dict-Eintrag machen, bei dem txt_Link.Text mit dem Schnellwiederfindestring baseLink (also Leerstring) verbunden wird und mittels [Leerstring] als Stichwort zu finden ist. Und da baseLink aufgrund der Deklaration+Definition konstant/immer ein Leerstring ist, würde eine Zuweisung nur zu einem Compilerfehler führen, da man einem konstanten Wert keinen neuen Wert abweichend vom bisherigen (Leerstring "") zuweisen darf => baseLink und username werden immer "" bleiben.
    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.
    Willst Du uns nicht an Deiner Lösung teilhaben lassen?

    Grüße
    #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 :!:
    Sehr gerne.

    Die Konstanten komplett raus gelöscht und der Code sieht nun so aus:

    VB.NET-Quellcode

    1. Public Function get_configuration() As configuration Implements itemplate.get_configuration
    2. Dim config As New configuration
    3. config.get_all.Clear()
    4. config.Add("baseLink", txt_Link.Text)
    5. config.Add("PRTGUserName", txt_Name.Text)
    6. config.Add("PRTGPassword", txt_PW.Text)
    7. Return config
    8. End Function
    9. Public Sub set_configuration(config As configuration) Implements itemplate.set_configuration
    10. If config Is Nothing Then
    11. Exit Sub
    12. End If
    13. If config.Item("baseLink") IsNot Nothing Then
    14. txt_Link.Text = config.Item("baseLink")
    15. End If
    16. If config.Item("PRTGUserName") IsNot Nothing Then
    17. txt_Name.Text = config.Item("PRTGUserName")
    18. End If
    19. If config.Item("PRTGPassword") IsNot Nothing Then
    20. txt_PW.Text = config.Item("PRTGPassword")
    21. End If
    22. End Sub