何番煎じか解りませんが、ObservableCollection をディクショナリー的に使用する拡張メソッド。てか、有名どころのライブラリに含まれてそう。
こんな使い方ができるようにする。
vardictionary=newObservableCollection<KeyValuePair<string,object>>();dictionary.Add("aaa",newobject());dictionary.Remove("aaa");以下、コード。
usingSystem;usingSystem.Collections.Generic;usingSystem.Collections.ObjectModel;namespaceDjKaosun.Extentions.ObservableCollection{/// <summary>/// ObservableCollection<KeyValuePair<TKey, TValue>> をディクショナリ的に使うための拡張メソッド。/// </summary>publicstaticclassObservableCollectionExtentions{/// <summary>/// キーに対応する値を取得します。(インデクサーの代替)/// </summary>/// <param name="observableCollection">拡張メソッドの基となるオブジェクト。</param>/// <param name="key">キー。</param>/// <returns>対応する値。</returns>publicstaticTValueGetValue<TKey,TValue>(thisObservableCollection<KeyValuePair<TKey,TValue>>observableCollection,TKeykey){foreach(varkeyValuePairinobservableCollection){if(keyValuePair.Key.Equals(key))returnkeyValuePair.Value;}thrownewKeyNotFoundException("The given key '"+key+"' was not present in the dictionary.S");}/// <summary>/// キーに対応する値を更新します。(インデクサーの代替)/// </summary>/// <param name="observableCollection">拡張メソッドの基となるオブジェクト。</param>/// <param name="key">キー。</param>/// <param name="value">新しい値。</param>publicstaticvoidUpdateValue<TKey,TValue>(thisObservableCollection<KeyValuePair<TKey,TValue>>observableCollection,TKeykey,TValuevalue){foreach(varkeyValuePairinobservableCollection){if(keyValuePair.Key.Equals(key)){observableCollection.Remove(keyValuePair);observableCollection.Add(newKeyValuePair<TKey,TValue>(key,value));return;}}thrownewKeyNotFoundException("The given key '"+key+"' was not present in the dictionary.S");}/// <summary>/// キーと値のペアを追加します。/// </summary>/// <param name="observableCollection">拡張メソッドの基となるオブジェクト。</param>/// <param name="key">キー。</param>/// <param name="value">値。</param>publicstaticvoidAdd<TKey,TValue>(thisObservableCollection<KeyValuePair<TKey,TValue>>observableCollection,TKeykey,TValuevalue){if(ContainsKey(observableCollection,key)){thrownewArgumentException("An item with the same key has already been added. Key: "+key);}observableCollection.Add(newKeyValuePair<TKey,TValue>(key,value));}/// <summary>/// キーが既に存在する場合は更新、存在しない場合は追加します。/// </summary>/// <param name="observableCollection">拡張メソッドの基となるオブジェクト。</param>/// <param name="key">キー。</param>/// <param name="value">値。</param>publicstaticvoidAddOrUpdate<TKey,TValue>(thisObservableCollection<KeyValuePair<TKey,TValue>>observableCollection,TKeykey,TValuevalue){foreach(varkeyValuePairinobservableCollection){if(keyValuePair.Key.Equals(key)){observableCollection.Remove(keyValuePair);break;}}observableCollection.Add(newKeyValuePair<TKey,TValue>(key,value));}/// <summary>/// キーが含まれるか判断します。/// </summary>/// <param name="observableCollection">拡張メソッドの基となるオブジェクト。</param>/// <param name="key">キー。</param>/// <returns>キーが含まれる場合 true。含まれない場合は false。</returns>publicstaticboolContainsKey<TKey,TValue>(thisObservableCollection<KeyValuePair<TKey,TValue>>observableCollection,TKeykey){foreach(varkeyValuePairinobservableCollection){if(keyValuePair.Key.Equals(key))returntrue;}returnfalse;}/// <summary>/// 値が含まれるか判断します。/// </summary>/// <param name="observableCollection">拡張メソッドの基となるオブジェクト。</param>/// <param name="value">値。</param>/// <returns>値が含まれる場合 true。含まれない場合は false。</returns>publicstaticboolContainsValue<TKey,TValue>(thisObservableCollection<KeyValuePair<TKey,TValue>>observableCollection,TValuevalue){foreach(varkeyValuePairinobservableCollection){if(keyValuePair.Value.Equals(value))returntrue;}returnfalse;}/// <summary>/// キーに対応するキー/値ペアを削除します。/// </summary>/// <param name="observableCollection">拡張メソッドの基となるオブジェクト。</param>/// <param name="key">キー。</param>/// <returns>削除された場合 true。削除されなかった場合は false。</returns>publicstaticboolRemove<TKey,TValue>(thisObservableCollection<KeyValuePair<TKey,TValue>>observableCollection,TKeykey){foreach(varkeyValuePairinobservableCollection){if(keyValuePair.Key.Equals(key)){observableCollection.Remove(keyValuePair);returntrue;}}returnfalse;}/// <summary>/// キーに対応するキー/値ペアを削除します。削除する対象が見つかったらその値を value パラメーターにコピーします。/// </summary>/// <param name="observableCollection">拡張メソッドの基となるオブジェクト。</param>/// <param name="key">キー。</param>/// <param name="value">削除された値。</param>/// <returns>削除された場合 true。削除されなかった場合は false。</returns>publicstaticboolRemove<TKey,TValue>(thisObservableCollection<KeyValuePair<TKey,TValue>>observableCollection,TKeykey,outTValuevalue){foreach(varkeyValuePairinobservableCollection){if(keyValuePair.Key.Equals(key)){value=keyValuePair.Value;observableCollection.Remove(keyValuePair);returntrue;}}value=default;returnfalse;}}}