如何缓解在C#中初始化列表字典的痛苦?

Bra*_*ann 5 .net c# collections .net-3.5

我偶然会使用这种结构:

Dictionary<string, List<string>> Foo = new Dictionary<string, List<string>>();
Run Code Online (Sandbox Code Playgroud)

这导致了这种代码:

foreach (DataRow dr in ds.Tables[0].Rows)
{
    List<string> bar;
    if (!Foo.TryGetValue(dr["Key"].ToString(), out desks))
    {
        bar= new List<string>();
        Foo.Add(dr["Key"].ToString(), bar);
    }
    bar.Add(dr["Value"].ToString());
}
Run Code Online (Sandbox Code Playgroud)

你认为编写自定义的DictionaryOfList类是否值得自动处理这类事情?

还有另一种懒惰地初始化这些列表的方法吗?

tan*_*ius 7

你可以写一个扩展方法 - GetValueOrCreateDefault()或类似的东西:

foreach (DataRow dr in ds.Tables[0].Rows)
{
    Foo.GetValueOrCreateDefault( dr["Key"] ).Add( dr["Value"].ToString() )
}
Run Code Online (Sandbox Code Playgroud)

也许你甚至可以为整个初始化编写扩展方法?