好了,現在我們就可以使用對象初始化語法,創建一個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 };