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()方法處理,其能夠是集合的集合變成乙個單一的新集合。
publicclass
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...