3 Stimmen

Hinzufügen und Abrufen aus einer KeyedCollection

Ich möchte eine KeyedCollection verwenden, um eine Klasse gegen einen String-Schlüsselwert zu speichern. Ich habe den folgenden Code:

public class MyClass
{
    public string Key;
    public string Test;
}

public class MyCollection : KeyedCollection<string, MyClass>
{
    public MyCollection() : base()
    {
    }

    protected override String GetKeyForItem(MyClass cls)
    {
        return cls.Key;
    }
}

class Program
{
    static void Main(string[] args)
    {
        MyCollection col = new MyCollection();
        col.Add(new MyClass()); // Here is want to specify the string Key Value
    }
}

Kann mir jemand sagen, was ich hier falsch mache? Wo muss ich den Schlüsselwert angeben, damit ich ihn abrufen kann?

8voto

AakashM Punkte 60642

Ihr GetKeyForItem override gibt den Schlüssel für ein Element an. Aus den Unterlagen:

Im Gegensatz zu Wörterbüchern ist ein Element von KeyedCollection ist kein Schlüssel/Wert-Paar; stattdessen ist das gesamte Element der Wert und der Schlüssel ist in den Wert eingebettet. Zum Beispiel ist ein Element einer Sammlung, die von KeyedCollection<String,String> könnte "John Doe Jr." sein, wobei der Wert "John Doe Jr." und der Schlüssel "Doe" ist; oder eine Sammlung von Mitarbeiterdatensätzen mit ganzzahligen Schlüsseln könnte abgeleitet werden von KeyedCollection<int,Employee>. The abstract Die Methode "GetKeyForItem" extrahiert den Schlüssel aus dem Element.

Damit das Element korrekt verschlüsselt wird, sollten Sie seine Key Eigenschaft antes de in die Sammlung aufzunehmen:

MyCollection col = new MyCollection();
MyClass myClass = new MyClass();
myClass.Key = "This is the key for this object";
col.Add(myClass);

1voto

Oded Punkte 475566

El KeyedCollection ist eine Basisklasse für die Erstellung von Sammlungen mit Schlüsseln, so dass Sie eine ganze Menge selbst implementieren müssen.

Vielleicht mit einer Dictionary wäre einfacher und schneller zu bearbeiten.

0voto

Jonathan Punkte 24623

Ich weiß, dass es etwas anders ist, aber haben Sie in Erwägung gezogen, eine Indexer .

public string this[string index]
{
    get { 
      // put get code here
    }
    set {
      // put set code here.
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X