4

私は深いリストを書きました:

public static List<KeyValuePair<string,List<KeyValuePair<string,List<KeyValuePair<string,bool>>>>>> ListBoxes = new List<KeyValuePair<string,List<KeyValuePair<string,List<KeyValuePair<string,bool>>>>>>();

誰かがこのリストにアイテムを追加する方法を知っていますか?
例えば: ("A",LIST("B",LIST("C",true)))

4

1 に答える 1

4

簡単:

ListBoxes.Add(
    new KeyValuePair<string, List<KeyValuePair<string, List<KeyValuePair<string, bool>>>>>("A",
        new List<KeyValuePair<string, List<KeyValuePair<string, bool>>>>
        {
            new KeyValuePair<string,List<KeyValuePair<string,bool>>>("B", 
                new List<KeyValuePair<string,bool>>() {
                    new KeyValuePair<string,bool>("C", true)
                }
            )
        }
    )
);

いくつかのヘルパーメソッドか何かを使用できるようです。

編集

単純な拡張メソッドを作成すると、タスクがもう少し読みやすくなります。

public static List<KeyValuePair<TKey, TValue>> AddKVP<TKey, TValue>(this List<KeyValuePair<TKey, TValue>> self, TKey key, TValue value)
{
    self.Add(
        new KeyValuePair<TKey, TValue>(key, value)
    );

    // return self for "fluent" like syntax
    return self;
}

var c = new List<KeyValuePair<string, bool>>().AddKVP("c", true);
var b = new List<KeyValuePair<string, List<KeyValuePair<string, bool>>>>().AddKVP("b", c);
var a = new List<KeyValuePair<string, List<KeyValuePair<string, List<KeyValuePair<string, bool>>>>>>().AddKVP("a", b);

編集#2

単純な型を定義すると、もう少し役立ちます。

public class KVPList<T> : List<KeyValuePair<string, T>> { }

public static KVPList<TValue> AddKVP<TValue>(this KVPList<TValue> self, string key, TValue value)
{
    self.Add(new KeyValuePair<string, TValue>(key, value));
    return self;
}

var ListBoxes = new KVPList<KVPList<KVPList<bool>>>()
   .AddKVP("A", new KVPList<KVPList<bool>>()
       .AddKVP("B", new KVPList<bool>()
           .AddKVP("C", true)));

編集#3

もう1つ、やめると約束します。タイプに「追加」を定義すると、暗黙的な初期化を使用できます。

public class KVPList<T> : List<KeyValuePair<string, T>> 
{
    public void Add(string key, T value)
    {
        base.Add(new KeyValuePair<string,T>(key, value));
    }
}

var abc = new KVPList<KVPList<KVPList<bool>>> { 
    { "A", new KVPList<KVPList<bool>> {
        { "B", new KVPList<bool> {
            { "C", true }}
        }}
    }};
于 2012-11-29T20:59:39.613 に答える