2011-07-24 13 views
0

私はSystem.Collections.CollectionBaseに基づいてCollectionオブジェクトを持っていますが、そのコレクション内のオブジェクトの値にアクセスするには、現在インデックスを使用する必要があります。コレクション内のオブジェクトの名前に基づいて値を取得することは可能ですか?例えばコレクション内のオブジェクトをその名前で参照できますか?

、代わりに...どのように私はの線に沿って何かを行うことができます

MyCollection[0].Value 

...:

MyCollection["Birthday"].Value 

答えて

1

もあなたが

この[]アクセサを使用することができます0

MyCollectionClassにこのゲッタープロパティを持ってください

2

あなたはそのにアクセスすることができますDictionary<TKey, TValue>を使用することができます要素でキーを指定します。したがって、例のキーが文字列の場合はDictionary<string, TValue>を使用できます。

4

これを行うには、Dictionary<string,object>が必要です。残念ながら、コレクションはインデックスによるランダムアクセスのみを許可します。

あなたはこのような何か行うことができます:

var item = MyCollection 
       .Where(x => x.SomeProp == "Birthday") 
       .FirstOrDefault(); 

// careful - item could be null here 
var value = item.Value; 

しかし、これはどこにも近く、インデックスによるランダムアクセスと同様に効率的になりますが。

2

なぜコレクション内のオブジェクトに名前があると思いますか?彼らはしません。できることはDictionary<String, SomethingElse>を使用して構文を有効にすることです。

+0

申し訳ありませんが、「名前」がコレクション内のオブジェクトのプロパティの1つとして保持されていることがわかりませんでした。 – triplestones

2

他の人からもお伝えしているとおり、Dictionary<>が必要です。コレクションを提供するコードを変更することができない場合は、辞書を自分に変換するLINQのToDictionary()メソッドを使用することができます。上のそこから

var dict = MyCollection.ToDictionary(obj => obj.Name); 

、あなたが行うことができます:

var value = dict["Birthday"].Value; 
0

回避策の一つでし

private const int BIRTHDAY = 0; 

var value = MyCollection["Birthday"].Value; 
関連する問題