3

KeyedCollectionを使用して、文字列キー値に対してクラスを格納したいと思います。私は次のコードを持っています:

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
    }
}

誰かが私がここで間違っていることを教えてもらえますか?キー値を取得できるように、どこでキー値を指定しますか?

4

3 に答える 3

8

オーバーライドGetKeyForItemは、アイテムのキーを指定するものです。ドキュメントから:

辞書とは異なり、の要素はKeyedCollectionキーと値のペアではありません。代わりに、要素全体が値であり、キーは値内に埋め込まれます。たとえば、から派生したコレクションの要素はKeyedCollection<String,String>「JohnDoeJr」である可能性があります。ここで、値は「JohnDoeJr。」です。キーは「Doe」です。KeyedCollection<int,Employee>. The abstractまたは、整数キーを含む従業員レコードのコレクションをGetKeyForItem`メソッドから派生させることができ、要素からキーを抽出します。

したがって、アイテムに正しくキーを設定するには、コレクションに追加する前にKeyそのプロパティを設定する必要があります。

MyCollection col = new MyCollection();
MyClass myClass = new MyClass();
myClass.Key = "This is the key for this object";
col.Add(myClass); 
于 2010-06-30T08:08:18.987 に答える
1

KeyedCollectionキー付きコレクションを作成するための基本クラスであるため、自分で実装する必要があるものはかなりたくさんあります。

おそらく、を使用するDictionary方が簡単で高速です。

于 2010-06-30T08:07:18.803 に答える
0

少し違うことは知っていますが、インデクサーの実装を検討しましたか。

public string this[string index]
{
    get { 
      // put get code here
    }
    set {
      // put set code here.
    }
}
于 2010-06-30T08:33:10.023 に答える