C#字典模式,这是最好的
本文关键字:字典 模式 | 更新日期: 2023-09-27 17:59:06
这些模式中的哪一个应该优先于其他模式,为什么?
foreach(KeyValuePair<string, Dictionary<string, string>> data in
new Dictionary<string, Dictionary<string, string>> {
{"HtmlAttributes", this.HtmlAttributes},
{"Content", this.Content}
})
{
foreach(KeyValuePair<string, string> entry in data.Value)
{
// do something
}
}
或
Dictionary<string, Dictionary<string, string>> data = new Dictionary<string, 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
请不要回答"使用var",因为我不喜欢使用它。
回复:var
(2年后):我必须添加一些内容来纠正这一点。回想起来,阅读Eric Lipert关于何时以及为什么使用var
的博客文章是完全有意义的。如果使用得当,也就是说不是所有时间,它都很有意义,而且它缩短了人们需要阅读的代码量。在使用什么初始化的问题上,对象初始化器是可以的,但将初始化与foreach
或其他处理分开会使代码更具可读性。
我认为Kent Boogaart和quakkels的评论是正确的。var在这里是有意义的。如果我必须从你们两个中选择一个,我会说第二个更好,因为它稍微更容易阅读。
我更喜欢介于两个版本之间的东西:拆分创建和迭代,但使用集合初始值设定项。
Dictionary<string, Dictionary<string, string>> dicts =
new Dictionary<string, Dictionary<string, string>> {
{"HtmlAttributes", this.HtmlAttributes},
{"Content", this.Content}
});
foreach(KeyValuePair<string, Dictionary<string, string>> data in dicts)
{
foreach(KeyValuePair<string, string> entry in data.Value)
{
// do something
}
}
或者等效地(实际上,从编译器和IDE的角度来看,以下内容完全相同):
var dicts = new Dictionary<string, Dictionary<string, string>> {
{"HtmlAttributes", this.HtmlAttributes},
{"Content", 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>>
。
我认为您的第二个版本可读性更强。考虑到您不喜欢使用var
,这似乎更重要,因为您的第一个版本有点让我头疼。
我还认为,将创建集合的代码与循环通过集合的代码混合在一起有点复杂
所以,对我来说,这是一个可读性的问题,我更喜欢第二个版本。但最终,任何一种都有效。