【发布时间】:2018-09-02 03:51:40
【问题描述】:
我刚刚阅读了this question。
如果我们有字典类型的属性:
public class Test
{
public Dictionary<string, string> Dictionary { get; set; } = new Dictionary<string, string>
{
{"1", "1" },
{"2", "2" },
};
}
然后我们可以构造对象并为其添加价值
var test = new Test { Dictionary = { { "3", "3" } } };
Console.WriteLine(test.Dictionary.Count); // 3
而且我不明白为什么存在这样一种令人困惑的语法添加项目?在查看其他人的代码时,很容易将其与 非常相似的外观
混淆 var test = new Test { Dictionary = new Dictionary<string, string> { { "3", "3" } } };
Console.WriteLine(test.Dictionary.Count); // 1
如果可以进行以下操作,我会更好(但事实并非如此):
var dictionary = new Dictionary<string, string> { { "1", "1" } };
...
// adding a new value
dictionary = { { "2" , "2"} }; // invalid expression term '{'
那么为什么需要并存在这种添加形式?面试?
【问题讨论】:
-
为了让代码更简洁 - docs.microsoft.com/en-us/dotnet/csharp/programming-guide/… 。我同意,在实践中,您希望避免使用它(没有
new)。 -
我也有同样的想法,很好的问题......不过非常基于意见。
-
应该注意,它只有在嵌套在另一个初始化器中时才会起作用。基本上,如果正确完成,您可以初始化一个复杂的对象,并且它是“一行”中的依赖项,避免了很多重复的语法。
-
@TimSchmelter 那不会创建字典。这只有在
Test在构造期间创建字典时才有效,然后{ { "", "" } }只是在该实例上调用Add。 -
所以初始化有一些在赋值中没有意义的快捷方式(或者没有实现)。
标签: c# collections object-initializers