物件和集合初始值設定項(C 程式設計指南)

2021-08-10 10:01:43 字數 2692 閱讀 9489

使用物件初始值設定項,你可以在建立物件時向物件的任何可訪問欄位或屬性分配值,而無需呼叫後跟賦值語句行的建構函式。

利用物件初始值設定項語法,你可為建構函式指定引數或忽略引數(以及括號語法)。

以下示例演示如何使用具有命名型別 cat 的物件初始值設定項以及如何呼叫預設建構函式。 請注意,自動實現的屬性在 cat 類中的用法。

class cat

public

string name

}

cat cat = new cat ;
具有匿名型別的物件初始值設定項

儘管物件初始值設定項可用於任何上下文中,但它們在 linq 查詢表示式中特別有用。 查詢表示式常使用只能通過使用物件初始值設定項進行初始化匿名型別,如下面的宣告所示。

var pet = new ;
利用匿名型別,linq 查詢表示式中的 select 子句可以將原始序列的物件轉換為其值和形狀可能不同於原始序列的物件。 如果你只想儲存某個序列中每個物件的部分資訊,則這很有用。 在下面的示例中,假定產品物件 (p) 包含很多欄位和方法,而你只想建立包含產品名和單價的物件序列。

var productinfos =

from p in products

select

new ;

執行此查詢時,productinfos 變數將包含一系列物件,這些物件可以在 foreach 語句中進行訪問,如下面的示例所示:

foreach(var p in productinfos)
新的匿名型別中的每個物件都具有兩個公共屬性,這兩個屬性接收與原始物件中的屬性或字段相同的名稱。 你還可在建立匿名型別時重新命名字段;下面的示例將 unitprice 字段重新命名為 price。

select

new ;

具有可以為 null 的型別的物件初始值設定項

使用具有可以為 null 的結構的物件初始值設定項會導致編譯時錯誤。

集合初始值設定項

在初始化實現 ienumerable 的集合型別和初始化使用適當的簽名作為例項方法或擴充套件方法的 add 時,集合初始值設定項允許指定乙個或多個元素初始值設定項。 元素初始值設定項可以是簡單的值、表示式或物件初始值設定項。 通過使用集合初始值設定項,你將無需在源**中指定對該類的 add 方法的多個呼叫;編譯器將新增這些呼叫。

下面的示例演示了兩個簡單的集合初始值設定項:

list digits = new list ;  

list digits2 = new list ;

下面的集合初始值設定項使用物件初始值設定項來初始化上乙個示例中定義的 cat 類的物件。 請注意,各個物件初始值設定項分別括在大括號中且用逗號隔開。

list

cats = new

list

, new cat(),

new cat()

};

如果集合的 add 方法允許,則可以將 null 指定為集合初始值設定項中的乙個元素。

list

morecats = new

list

, new cat(),

null

};

如果集合支援索引,可以指定索引元素。

var numbers = new dictionary ;
示例

// the following code consolidates examples from the topic.

class objinitializers

public

string name

}static

void main()

;listcats = new list,

new cat(),

new cat()

};listmorecats = new list,

new cat(),

null

};// display results.

system.console.writeline(cat.name);

foreach (cat c in cats)

system.console.writeline(c.name);

foreach (cat c in morecats)

if (c != null)

system.console.writeline(c.name);

else

system.console.writeline("list element has null value.");

}// output:

//fluffy

//sylvester

//whiskers

//sasha

//furrytail

//peaches

//list element has null value.

}

C 元組投影初始值設定項

使用過命名元組的同學都知道,命名元組可以使用 有意義的欄位名 來代替item,用於表示元組的成員。在c 7.1中引入了 元組投影初始值設定項 tuple projection initializers 提公升了命名元組的程式設計體驗 一般情況下,我們會採用下面這種方式進行命名元組的建立 var fi...

c 型別初始值設定項引發異常

typeinitializationexeption在msnd中的描述為 當類初始值設定項不能初始化型別時,將建立 typeinitializationexception 並向其傳遞由該型別的類初始值設定項引發的異常引用。我們知道,型別初始化或者訪問型別的靜態成員時,都會對類中的其他靜態成員進行初始...

型別初始值設定項引發異常

連續兩天都為這個執行時錯誤 型別初始值設定項引發異常 而煩惱,除錯也不知道 出了問題。在王舒和陳雄學長的幫助下,哈哈,終於就解決啦!問題是這樣嘀 專案採用了三層架構和工廠模式,對專案新增引用的。1 web 引用 bll。2 bll 引用 idal,model,使用dalfactory建立例項。3 i...