我想在下一段代码中使用集合初始值设定项:
public Dictionary<int, string> GetNames()
{
Dictionary<int, string> names = new Dictionary<int, string>();
names.Add(1, "Adam");
names.Add(2, "Bart");
names.Add(3, "Charlie");
return names;
}
通常它应该是这样的:
return new Dictionary<int, string>
{
1, "Adam",
2, "Bart"
...
但是这个的正确语法是什么?
答案 0 :(得分:156)
var names = new Dictionary<int, string> {
{ 1, "Adam" },
{ 2, "Bart" },
{ 3, "Charlie" }
};
答案 1 :(得分:35)
语法略有不同:
Dictionary<int, string> names = new Dictionary<int, string>()
{
{ 1, "Adam" },
{ 2, "Bart" }
}
请注意,您正在有效地添加值元组。
作为旁注:集合初始化器包含的参数基本上是任何 Add()函数的参数,它对于编译时参数类型而言非常方便。也就是说,如果我有一个集合:
class FooCollection : IEnumerable
{
public void Add(int i) ...
public void Add(string s) ...
public void Add(double d) ...
}
以下代码完全合法:
var foos = new FooCollection() { 1, 2, 3.14, "Hello, world!" };
答案 2 :(得分:11)
return new Dictionary<int, string>
{
{ 1, "Adam" },
{ 2, "Bart" },
...
答案 3 :(得分:10)
问题标记为c#-3.0
,但为了完整起见,我将提及C#6提供的新语法,以防您使用Visual Studio 2015(或Mono 4.0):
var dictionary = new Dictionary<int, string>
{
[1] = "Adam",
[2] = "Bart",
[3] = "Charlie"
};
注意:如果您更喜欢,其他答案中提到的旧语法仍然有效。同样,为了完整性,这是旧语法:
var dictionary = new Dictionary<int, string>
{
{ 1, "Adam" },
{ 2, "Bart" },
{ 3, "Charlie" }
};
另一种很酷的事情是,无论使用哪种语法,您都可以留下最后一个逗号(如果您愿意),这样可以更轻松地复制/粘贴其他行。例如,以下编译就好了:
var dictionary = new Dictionary<int, string>
{
[1] = "Adam",
[2] = "Bart",
[3] = "Charlie",
};
答案 4 :(得分:5)
如果您正在寻找稍微简短的语法,您可以创建Dictionary<string, object>
(或任何类型)的子类,如下所示:
public class DebugKeyValueDict : Dictionary<string, object>
{
}
然后就像这样初始化
var debugValues = new DebugKeyValueDict
{
{ "Billing Address", billingAddress },
{ "CC Last 4", card.GetLast4Digits() },
{ "Response.Success", updateResponse.Success }
});
相当于
var debugValues = new Dictionary<string, object>
{
{ "Billing Address", billingAddress },
{ "CC Last 4", card.GetLast4Digits() },
{ "Response.Success", updateResponse.Success }
});
好处是你得到了你可能想要的所有编译类型的东西,比如能够说
is DebugKeyValueDict
代替is IDictionary<string, object>
或在以后更改键或值的类型。 如果你在razor cshtml页面中做这样的事情,那么看起来好多了。
除了不那么冗长之外,您当然可以为此课程添加额外的方法,无论您想要什么。
答案 5 :(得分:1)
在以下代码示例中,使用Dictionary<TKey, TValue>
类型的实例初始化StudentName
。
Dictionary<int, StudentName> students = new Dictionary<int, StudentName>()
{
{ 111, new StudentName {FirstName="Sachin", LastName="Karnik", ID=211}},
{ 112, new StudentName {FirstName="Dina", LastName="Salimzianova", ID=317}},
{ 113, new StudentName {FirstName="Andy", LastName="Ruth", ID=198}}
};
来自msdn
答案 6 :(得分:-3)
是的,我们可以在字典中使用集合初始化器。如果我们有这样的字典 -
Dictionary<int,string> dict = new Dictionary<int,string>();
dict.Add(1,"Mohan");
dict.Add(2, "Kishor");
dict.Add(3, "Pankaj");
dict.Add(4, "Jeetu");
我们可以按照以下方式对其进行初始化。
Dictionary<int,string> dict = new Dictionary<int,string>
{
{1,"Mohan" },
{2,"Kishor" },
{3,"Pankaj" },
{4,"Jeetu" }
};