一、 引言
C# 3.0中新的對(duì)象初始化器是一種簡單的語法特征-借助于這種特征,對(duì)象的構(gòu)建和初始化變得非常簡單。假定你有一個(gè)類Student,它看起來有如下樣子:
public class Student{
public string firstName;
public string lastName;
}
那么,你可以使用對(duì)象初始化器來創(chuàng)建這個(gè)類的一個(gè)對(duì)象,如下所示:
var student1 = new Student{firstName = "Bruce", lastName = "Willis"};
C# 3.0中新的集合初始化器語法也具有類似操作特征。例如,實(shí)現(xiàn)System.Collections.Generic.ICollection<T>的任何對(duì)象都可以使用一個(gè)集合初始化器來初始化它的值。
一個(gè)集合初始化器由下列部分組成:
· 一個(gè)對(duì)象初始化器序列,用"{"和"}"符號(hào)包括,并且由逗號(hào)隔開。
· 元素初始化器,它們中每一個(gè)都指定一個(gè)元素以被添加到指定的集合對(duì)象中(元素初始化器不能是一個(gè)集合初始化器中的賦值表達(dá)式)。
那么,究竟它是如何工作的呢?一個(gè)集合初始化器必須遵循下列規(guī)則:
· 應(yīng)用集合初始化器的每一個(gè)集合對(duì)象必須是一種實(shí)現(xiàn)了System.Collections.Generic.ICollection<T>的類型(恰好針對(duì)一個(gè)T)。
· 必須存在從每一個(gè)元素初始化器到T類型的一種隱式轉(zhuǎn)換。一個(gè)集合初始化器針對(duì)每一個(gè)指定的元素都會(huì)按序調(diào)用ICollection<T>.Add(T)方法。
作為一個(gè)例子,下面的集合初始化器創(chuàng)建并初始化一個(gè)新的字符串集合-這個(gè)集合具有3個(gè)成員:"Alice","Bob"和"Chris",參考如下:
List<string> names = new List<string> { "Alice", "Bob", "Chris" };
注意:所有的初始值都是字符串類型。否則,你將得到一個(gè)編譯器錯(cuò)誤。
二、 實(shí)現(xiàn)集合初始化
假定你想描述一個(gè)班及其中的注冊同學(xué)。為此,你可以通過使用C# 3.0中的集合初始化器編程實(shí)現(xiàn),如下所示:
using System;
using System.Collections.Generic;
using System.Text;
using System.Query;
using System.XML.XLinq;
using System.Data.DLinq;
namespace CollectionInitializer
{
class Program
{
public class MyClass
{
public string nameofClass;
public List<string> studentNames = new List<string>();
}
static void Main(string[] args)
{
var classes = new List<MyClass>
{
new MyClass
{
nameofClass = "Science",
studentNames = {"Laura", "George"}
},
new MyClass
{
nameofClass = "Commerce",
studentNames = {"Bill", "Hillary"}
}
};
}
}
}
如果你有Visual Studio 2005并且安裝了LINQ Preview,那么可以在IDE中編譯上面的代碼。
如果你沒有VS 2005但是安裝了LINQ Preview,那么你可以使用下列命令來從命令行編譯該代碼:
C:\Program Files\LINQ Preview\Bin\Csc.exe
/reference:"C:\Program Files\LINQ Preview\Bin\System.Data.DLinq.dll"
/reference:C:\Windows\Microsoft.net\Framework\v2.0.50727\System.Data.dll
/reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll
/reference:"C:\Program Files\LINQ Preview\Bin\System.Query.dll"
/reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.XML.dll
/reference:"C:\Program Files\LINQ Preview\Bin\System.Xml.XLinq.dll" Program.cs
C# 3.0中新的對(duì)象初始化器是一種簡單的語法特征-借助于這種特征,對(duì)象的構(gòu)建和初始化變得非常簡單。假定你有一個(gè)類Student,它看起來有如下樣子:
public class Student{
public string firstName;
public string lastName;
}
那么,你可以使用對(duì)象初始化器來創(chuàng)建這個(gè)類的一個(gè)對(duì)象,如下所示:
var student1 = new Student{firstName = "Bruce", lastName = "Willis"};
C# 3.0中新的集合初始化器語法也具有類似操作特征。例如,實(shí)現(xiàn)System.Collections.Generic.ICollection<T>的任何對(duì)象都可以使用一個(gè)集合初始化器來初始化它的值。
一個(gè)集合初始化器由下列部分組成:
· 一個(gè)對(duì)象初始化器序列,用"{"和"}"符號(hào)包括,并且由逗號(hào)隔開。
· 元素初始化器,它們中每一個(gè)都指定一個(gè)元素以被添加到指定的集合對(duì)象中(元素初始化器不能是一個(gè)集合初始化器中的賦值表達(dá)式)。
那么,究竟它是如何工作的呢?一個(gè)集合初始化器必須遵循下列規(guī)則:
· 應(yīng)用集合初始化器的每一個(gè)集合對(duì)象必須是一種實(shí)現(xiàn)了System.Collections.Generic.ICollection<T>的類型(恰好針對(duì)一個(gè)T)。
· 必須存在從每一個(gè)元素初始化器到T類型的一種隱式轉(zhuǎn)換。一個(gè)集合初始化器針對(duì)每一個(gè)指定的元素都會(huì)按序調(diào)用ICollection<T>.Add(T)方法。
作為一個(gè)例子,下面的集合初始化器創(chuàng)建并初始化一個(gè)新的字符串集合-這個(gè)集合具有3個(gè)成員:"Alice","Bob"和"Chris",參考如下:
List<string> names = new List<string> { "Alice", "Bob", "Chris" };
注意:所有的初始值都是字符串類型。否則,你將得到一個(gè)編譯器錯(cuò)誤。
二、 實(shí)現(xiàn)集合初始化
假定你想描述一個(gè)班及其中的注冊同學(xué)。為此,你可以通過使用C# 3.0中的集合初始化器編程實(shí)現(xiàn),如下所示:
using System;
using System.Collections.Generic;
using System.Text;
using System.Query;
using System.XML.XLinq;
using System.Data.DLinq;
namespace CollectionInitializer
{
class Program
{
public class MyClass
{
public string nameofClass;
public List<string> studentNames = new List<string>();
}
static void Main(string[] args)
{
var classes = new List<MyClass>
{
new MyClass
{
nameofClass = "Science",
studentNames = {"Laura", "George"}
},
new MyClass
{
nameofClass = "Commerce",
studentNames = {"Bill", "Hillary"}
}
};
}
}
}
如果你有Visual Studio 2005并且安裝了LINQ Preview,那么可以在IDE中編譯上面的代碼。
如果你沒有VS 2005但是安裝了LINQ Preview,那么你可以使用下列命令來從命令行編譯該代碼:
C:\Program Files\LINQ Preview\Bin\Csc.exe
/reference:"C:\Program Files\LINQ Preview\Bin\System.Data.DLinq.dll"
/reference:C:\Windows\Microsoft.net\Framework\v2.0.50727\System.Data.dll
/reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll
/reference:"C:\Program Files\LINQ Preview\Bin\System.Query.dll"
/reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.XML.dll
/reference:"C:\Program Files\LINQ Preview\Bin\System.Xml.XLinq.dll" Program.cs