C 學習筆記10

2022-04-03 20:20:07 字數 2701 閱讀 5056

1.匿名型別:匿名型別是c#3.0新增的特性,是強型別(由編譯器後台在生成為cil時,自動宣告的**定義型別),宣告與初始化屬性後其屬性是盡讀屬性。只有在屬性的名稱、順序、型別一致時,多個宣告匿名變數才會共用同乙個匿名型別。其tostring()方法已重寫了返回的是屬性名稱與值的文字。

2.隱式區域性變數:在使用var宣告區域性變數時,應該注意2點,分別為

(1)可以從賦值「=」右邊的型別明顯知道左邊的型別宣告,如 new fileinfo("") 可以明確知道是檔案烈性,可以使用var。但是右邊若是乙個方法呼叫,則應該顯式宣告型別。便於知道返回型別,而不用進入方法內部檢視。

(2)一般在使用匿名型別時可以使用var,因為不能明確知道編譯生成的型別。但在使用linq等標準查詢運算子中應該使用顯式宣告,如ienumerableresult 比 var result更具可讀性。

3.foreach迴圈內不要修改集合。

4.集合初始化器:集合初始化器要想編譯成功,需要滿足2點中的一點,分別為

(1)理想情況下,集合應該實現了icollecation介面,這樣就可以保證集合支援乙個add()方法,編譯器生成的**可以呼叫這個add()方法,

(2)寬鬆情況下,集合應該實現了ienumerable介面,其存在乙個或多個add()方法,即使集合型別沒有實現icollecation介面,add()方法需要接受與集合初始化器中指定的值相容的引數。

注意,匿名型別是不能直接使用集合初始化器的,因為集合初始化器需要執行一次構造器的呼叫,但你根本沒法命名這個構造器。有2種方式,

(1)定義乙個像下面這樣的方法,通過呼叫該方法即可建立匿名型別的集合,(static listcreatelist(t t) )。

(2)使用陣列處理,如 var items = new 。

5.標準查詢運算子:在使用where()與select()時,是對集合進行垂直與水平方向的資料處理。在使用linq中,大部分是延遲執行的動作,因此使用中應該注意是否有立即執行的需要,在.net4.0中新增了plinq(並行linq)功能,使用集合的asparallel(),它是parallelenumerable類的乙個成員,是乙個擴充套件方法。然後即可使用並行查詢或過濾資料,

如list.asparallel().where(t=>t.name.startwith("a"))。

6.在使用linq進行公升序排序時,第乙個排序方法要使用orderby(),後面其他排序使用thenby(),降序同理。

7.join與groupjoin:前者為2個集合的內聯接(等同sql的inner join);後者為分組聯接(實現一對多關係),即左邊集合分組後對應的右邊集合那些元素。

8.左外聯:使用groupjoin().selectmany()和defaultifempty()來實現的,可檢視corporatedata.getleftinnerdata()方法中的**。

9.我們偶爾會處理有集合構成的集合,若有獲得其中每一項需要雙重的巢狀遍歷,這裡可以使用selectmany()方法處理,其能夠是集合的集合變成乙個單一的新集合。

public

class

corporatedata

,

new department(),

new department(),

new department(),

new department()

};public

static employee employees = new

employee

,new employee() ,

new employee() ,

new employee() ,

new employee() ,

new employee() ,

new employee() ,

new employee() ,

new employee() ,

new employee()

};//集合左外連線處理

public

static

void

getleftinnerdata()

).selectmany(departmentemployees =>departmentemployees.employees.defaultifempty(),

(d, e) => new );

foreach (var item in

result)

, employee :

", item.name, item.employee);}}

//分組集合

public

static

void

getgroupby()

", employee);}}

}}public

class

department

public

class

employee

, callname=

", name, callname);

}}

---------------------------以上內容根據《c#本質論 第三版》進行整理

學習筆記10

類與物件 物件 屬性 方法 用class定義python類,然後接類的名稱和冒號。python的self相當於c 的this指標。self是類中乙個額外的第乙個引數名稱 在呼叫方法時 無需明確提供與引數self相對應的引數。魔法方法 init self param1,param2 這個方法在類例項化...

學習筆記10

2.塊裝置i o棧 2.1基本概念 介紹塊裝置的i o棧之前,我們先來了解一下塊i o棧的幾個基本概念。1 bio bio是通用塊層i o請求的資料結構,表示上層提交的i o請求,乙個bio包含多個page,這些page必須對應磁碟上一段連續的空間。由於檔案在磁碟上並不連續存放,檔案i o提交到塊裝...

python numpy 學習筆記 10

1.矩陣的相關操作 求逆,求解線性方程組,求解特徵值,求解特徵向量,奇異值分解 coding utf 8 from numpy import a mat 0 1 2 1 0 3 4 3 8 inverse linalg.inv a print inverse print a.i print a in...