C#词典模式,哪个最好?

问题描述

| 这些模式中的哪一个应该比其他更受欢迎,为什么?
foreach(keyvaluePair<string,Dictionary<string,string>> data in
    new Dictionary<string,string>> { 
        {\"HtmlAttributes\",this.HtmlAttributes},{\"Content\",this.Content}
    }) 
{
     foreach(keyvaluePair<string,string> entry in data.Value)
     {
         // do something
     }
}
要么
Dictionary<string,string>> data = new Dictionary<string,string>>();
data.Add(\"HtmlAttributes\",this.HtmlAttributes);
data.Add(\"Content\",this.Content);

foreach(keyvaluePair<string,IDictionary<string,string>> entry in data) 
{
    // Do something
}           

data.Clear(); // not sure if this is needed either
data = null;  // gc object 
请不要用\“ use var \\”回答,因为我不喜欢使用它。 回复
var
(2年后):我必须添加一些内容以实现此目的。回想起来,阅读Eric Lipert的博客文章有关何时以及为何使用
var
完全有意义。如果使用得当,这意味着不是一直都在使用,这很有意义,并且缩短了一个人需要读取的代码量。关于使用哪种初始化,对象初始化器很好,但是将初始化与ѭ4或其他处理分开可以使代码更具可读性。     

解决方法

        在两个版本之间,我希望有一些东西:拆分创建和迭代,但是使用集合初始化器。
Dictionary<string,Dictionary<string,string>> dicts =
    new Dictionary<string,string>> { 
    {\"HtmlAttributes\",this.HtmlAttributes},{\"Content\",this.Content}
});

foreach(KeyValuePair<string,string>> data in dicts)
{
     foreach(KeyValuePair<string,string> entry in data.Value)
     {
         // do something
     }
}
或等效(实际上,从编译器和IDE的角度来看,以下内容完全相同):
var dicts = new Dictionary<string,this.Content}
});

foreach(var data in dicts)
{
     foreach(var entry in data.Value)
     {
         // do something
     }
}
另外,如果您使用
Dictionary
作为对的列表,则可以使用
List<KeyValuePair<K,V>>
或(在.Net 4上)
List<Tuple<T1,T2>>
。     ,        我认为Kent Boogaart和quakkels的评论是正确的。 var在这里有意义。如果我必须选择两个中的一个,我会说第二个更好,因为它更容易阅读。     ,        我认为您的第二个版本更具可读性。鉴于您不喜欢使用
var
,这似乎更为重要,因为您的第一个版本让我头疼。 我还认为将创建集合的代码与遍历它的代码混合起来有点费解。 因此,对我来说,这是可读性的问题,我更喜欢第二个版本。但最后,任何一个都行得通。