C#3.0语言新特性之对象和集合初始化器
2009-03-11 08:19:23 来源:WEB开发网好了,现在我们就可以使用对象初始化语法,创建一个Rectangle的实例并且将它内部的点设置如下:
Rectangle myRect = new Rectangle
{
TopLeft = new Point { X = 100, Y = 100 },
BottomRight = new Point { X = 200, Y = 200 }
};
这样设置是不是简单多了,从而也提高了可读性。这个时候,我们就能够体会到它相对于传统方法的好处了。
在最后,为了能够让读者更好地进行对比学习,我们再给出它的原始调用方法:
Rectangle myRect = new Rectangle();
Point p1 = new Point();
p1.X = 100;
p1.Y = 100;
myRect.TopLeft = p1;
Point p2 = new Point();
p2.X = 200;
p2.Y = 200;
myRect.BottomRight = p2;
20.4.4 集合初始化器
与对象初始化语法类似的是集合初始化。这个语法使得我们可以用简单的数组类型来初始化一个泛型容器(比如List<T>)。可以应用集合初始化器的对象的类型必须实现了System.Collections.Generic.ICollections<T>并指定了确定的T。此外,必须存在从每个元素初始化器的类型到T的隐式转换。如果这些条件不能满足,就会产生一个编译期错误。集合初始化器将依次对每个指定的元素调用ICollection<T>.Add(T)。在这个约束之下,System.Collection命名空间下的容器(比如ArrayList)就不能使用这种新语法,因为它们并没有实现所需的接口。
一个集合初始化器由一系列的元素初始化器构成,包围在{和}记号之间,并使用逗号进行分隔。每个元素初始化器指定一个元素,该元素将被添加到待初始化的集合对象中。为了避免与成员初始化器混淆,元素初始化器不能是赋值表达式。如下面的例子所示:
// 初始化一个普通数组
int[] myIntArray = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// 初始化一个int型泛型List<>
List<int> myGenericList = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// 下面这句是非法的,ArrayList没有实现ICollection<T>接口
ArrayList myList = new ArrayList { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
现在我们把前面用到的Point类应用进来,比如:
static void Main()
{
List<Point> myPointList = new List<Point>
{
new Point {X = 10, Y = 20},
new Point {X = 100, Y = 200},
new Point {X = 1000, Y = 2000}
};
foreach (var p in myPointList)
{
Console.WriteLine(p);
}
}
程序运行结果如下:
[10,20,Color=白色]
[100,200,Color=白色]
[1000,2000,Color=白色]
更多精彩
赞助商链接