C# 3.0中集合初始设定项(Collection Initializers)到底做了什么?
2011-08-01 21:23
585 查看
今天一朋友问我一个问题:怎样用集合初始设定项来初始化一个字典?他一直认为所谓集合初始设定项就是向一个类似List的容器中逐个添加数据,但是换成了字典一次需要两个数据,一下不知道怎么办……
我首先又一次强烈推荐他把MSDN当成解决一切问题的第一步尝试,其实集合初始值设定项MSDN里阐述得很透彻(地址:http://msdn.microsoft.com/zh-cn/library/bb384062.aspx ):集合初始值设定项就是连续调用一个IEnumerable类的Add函数。多个参数可以用{}(大括号)来分割。
那么初始化字典就是这样:
IDictionary<int,
string> dic
= new
Dictionary<int,
string>()
{
{23,
"sfds"},
{434,
"rg"},
{-3,
"jif"}
};
foreach (KeyValuePair<int,
string> pair
in dic)
Console.WriteLine(pair);
输出:
[23, sfds]
[434, rg]
[-3, jif]
也可以自定义一个类继承IEnumerable并有Add函数
class
a : System.Collections.IEnumerable
{
public
void Add(object a,
object b)
{
Console.WriteLine("Add被调用,a={0}, b={1}",
a, b);
}
#region IEnumerable Members
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
throw
new
NotImplementedException();
}
#endregion
}
class
Program
{
static
void Main()
{
a obj
= new
a()
{
{1,
"hehe"},
{DateTime.Now,
Guid.NewGuid()}
};
}
}
输出:
Add被调用,a=1, b=hehe
Add被调用,a=6/23/2011 4:07:35 PM, b=73ecbf16-1cab-4aa6-af20-2afc9b622e67
当对一个非IEnumerable类使用集合初始设定项或一个IEnumerable类但没有Add函数,VS会产生编译错误。
http://www.cnblogs.com/mgen/archive/2011/06/23/2088221.html
相关文章推荐
- C#对象和集合初始值设定项
- C# Tips: 使用集合初始值设定项初始化字典
- C#解决“Emgu.CV.CvInvoke”的类型初始值设定项引发异常 的其中一个办法
- C# 3.0新特性初步研究 Part4:使用集合类型初始化器
- C# 读取app.config配置文件 节点键值,提示 "System.TypeInitializationException 类型初始值设定项引发异常" 错误的解决方案
- c# 为什么结构中不能有实例字段初始设定值项
- C# 3.0新特性之对象和集合初始化
- c#使用CsGL时一个小错误:“CsGL.OSLib”的类型初始值设定项引发异常 产生的原因
- C# 3.0新特性初步研究 Part4:使用集合类型初始化器_C#教程
- 请问C#中get和SET到底是什么意思啊?
- c# 类型初始值设定项引发异常
- C# 3.0:对象集合化初始器
- C# 事件到底是什么
- c#系列——“OSGeo.GDAL.GdalPINVOKE”的类型初始值设定项引发异常。
- c# 类型初始值设定项引发异常
- 永远神话——C#/C/C++到底还能做什么?
- SQLServer\framework启动报异常:Module的类型初始值设定项引发异常 [转]QQ空间、新浪微博、腾讯微博等一键分享API链接代码 window下 mongodb快速安装 数据表查询所有子/父节点 C#学习笔记1
- C# 3.0新特性之Automatic Properties(自动属性)、Object Initializers(对象初始化器)、Collection Initializers(集合初始化器)和Extension Methods(扩展方法)
- c#到底能做什么
- 详解C#中使用对象或集合的初始值设定项初始化的操作