CodeDom Compiler akzeptiert Dictionarys nicht

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von PhoenixBlaster.

    CodeDom Compiler akzeptiert Dictionarys nicht

    Hi

    Ich versuche mit CodeDom eine VB-Datei zu einer DLL zu kompilieren. Es funktionert auch nur bei einer Stelle gibt es ein Problem.
    Ich habe alle Verweise gesetzt und oben in der zu kompilierenden Klasse

    VB.NET-Quellcode

    1. Imports System.Collections.Generic

    geschrieben. Nun möchte ich in der Klasse (nicht in einer Methode) ein Dictionary erstellen, hab ich auch getan:

    VB.NET-Quellcode

    1. Public Shared dic As Dictionary = New Dictionary(Of String, String)

    nur wenn ich das kompilieren will kommt folgender Fehler:


    MFG
    PhoenixBlaster :)

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „PhoenixBlaster“ ()

    Hi

    VB.NET-Quellcode

    1. Dictionary = New Dictionary(Of String, String)

    ->

    VB.NET-Quellcode

    1. Dictionary(Of String, String) = New Dictionary(Of String, String)


    oder

    VB.NET-Quellcode

    1. As New Dictionary(Of String, String)


    Von der Architektur würde ich allerdings eher abraten. Lieber ein privates Dictionary und es nach außen weiterreichen oder das Verhalten, das bereitgestellt werden soll, nach außen über Methoden verfügbar machen.

    Gruß
    ~blaze~
    Danke für die Hilfe, aber es gibt jetzt ein neues Problem

    error BC30367: Die Klasse "System.Collections.Generic.Dictionary(Of String, String).KeyCollection" kann nicht indiziert werden, da sie keine Standardeigenschaft hat.

    Diesen Fehler bekomm ich jedes mal wenn ich das "dic"-Dictonary benutzen will
    der code funktioniert in vs. Ich will nur wissen was das hier heißt
    error BC30367: Die Klasse "System.Collections.Generic.Dictionary(Of String, String).KeyCollection" kann nicht indiziert werden, da sie keine Standardeigenschaft hat.

    Der code wenn er dir hilft

    VB.NET-Quellcode

    1. Public Class TForm1
    2. Public Shared dic As Dictionary(Of String, String) = New Dictionary(Of String, String)
    3. Public Shared Sub CreateDictionary()
    4. dic.Add("Schlüssel", "Wert")
    5. End Sub


    Der Fehler tritt bei den Zeilen auf wo die auf die "Keys" und die "Values" der dictionary zugreifen will also zum Beispiel:

    VB.NET-Quellcode

    1. Dim s As String = dic.Keys(1)
    Die Fehlermeldung besagt, dass die KeyCollection wohl keinen Indexer hat, d.h. dass Keys(1) z.B. nicht funktioniert. Du könntest z.B. stattdessen eine System.Collections.ObjectModel.KeyedCollection(Of TKey, TValue) verwenden. Einfach von der Klasse erben und die geforderte Methode überschreiben. Ist halt etwas anders, als das Dictionary.

    Ist aber nicht unbedingt die Lösung, die ich in allen Fällen vorschlagen würde, aber dafür müsste man wohl wissen, was du damit bezweckst.

    Gruß
    ~blaze~
    Du könntest bspw. die Extensions aus System.Linq importieren, dann hast du auch einen "Quasiindexer", wenn ich mich nicht täusche. Allerdings ist es nicht unbedingt sinnvoll, ein Dictionary zu verwenden, wenn du danach auf Indices zurückgreifst. Das ist auf Schlüssel, nicht auf Indices optimiert.

    Gruß
    ~blaze~
    okay was ich will ist einfach ein Objekt mit zwei Listen und ich will auf die Items beider Listen zugreifen können und ich dachte da das ein dictionary das beste wär. oder nicht und das mit den Xml.Linq?:

    VB.NET-Quellcode

    1. Imports System.Linq.Extensions ?