C 語言新特性與Linq查詢知識點

2021-10-07 04:33:53 字數 2732 閱讀 3330

自動屬性

下面兩種寫法作用相同.前者屬於自動屬性.在使用自動屬性時應該注意:get和set訪問器不能有具體的實現.

可空型別(可以為空的值型別)

對於值型別而言,c#規定:在定義變數的同時必須要對其賦初值,否則可能無法通過編譯器的編譯.但是在某些情況下,使用者事先是不知道變數的初始值是多少的.因為可以為空的值型別就顯得很重要.

值型別包括:int\double\float\decimal\bool\char

可為空的語法為:nullable,其中t指代上面具體的某種值型別

比如,可以為空的int型別:nullable;可以為空的bool型別:nullable

可以為空的變數,在賦值時,可以將null賦值給它.

例如:nullable age = null;

nullable可以簡寫為:t?

例如: nullable age = null;等價於int? age = null;

下面兩種寫法都是錯誤的.

string? name = null; student? stu = null;

因為string和student都是引用型別.

可空值型別的常用屬性:

hasvalue:布林型別,如果欄位不為null返回true,否則返回false.

value:獲取欄位的值,如果該字段的值為null,那麼呼叫value屬性會報錯

泛型類

list:t可以指代任何型別,比如:int\bool\string\student…

dictionary:字典類,其中t和k可以指代任何型別

keyvaluepair:鍵值對型別

物件初始化器

利用物件初始化器,在例項化乙個類物件的同時可以為它的屬性賦值.

集合初始化器

利用集合初始化器,可以在例項化乙個集合物件時為它指定元素

var關鍵字

var用於定義變數,變數的型別根據值來確定.

var a = 5; 因為5是int型別,所以a的型別也是int

var stu = new student();因為通過new建立的是student型別的變數,所以stu是student型別.

注意1:var b;這種寫法是錯誤的.原因是由var宣告的變數,必須在定義的同時就賦初值.

注意2:通過var宣告的變數一旦例項化後,就不能再更改它的資料型別.例如下面的**:

var a = 5; a = 「zhangsan」;//a=」zhangsan」報錯

匿名型別

在例項化乙個類物件時,可以無須事先定義該類,通過new{}即可動態建立類物件.

擴充套件方法

擴充套件方法是指:為以前定義好的類擴充套件其他方法.具體步驟如下:

7. 首先,定義乙個靜態類(類的名稱沒有限制)

8. 其次,在靜態類中定義乙個靜態方法(方法返回值根據實際情況自定定義)

9. 最後,給上述靜態方法新增乙個引數,且該引數必須被this關鍵字修飾.

注意: 上面被this關鍵字修飾的引數的型別就是該擴充套件方法所擴充套件的型別

下面的**演示了如何為string類副檔名稱為convert的無參方法.

匿名型別和lambda表示式

什麼是委託:委託允許將乙個方法作為引數,傳遞給另外乙個方法.

下面的**演示了如果使用委託計算2個數字的加法\減法\乘法.

委託和掛載的方法:引數個數\引數型別\引數順序\返回值型別必須要一致

但是上述方式,使用很複雜.我們可以通過匿名方法來簡寫上述功能.=符號右側的就是匿名方法

lambda表示式分3部分 : 引數 | => | 表示式

下面的**演示了如果使用lambda表示式改寫委託的示例.其中3個粉色的線框就是lambda的3部分.

注意1:如果lambda表示式只有1個引數,那麼引數部分可以不用()包裹

注意2:lambda表示式部分可以使用{}包裹,也可以不包裹.如果有多行**,必須要使用{}包裹起來.

在出現委託(func引數)的地方,我們就可以寫lambda表示式.

func是乙個泛型委託.該委託的引數型別為t,返回值型別為k.

lambda表示式的引數arg的型別為t,lambda的表示式部分返回值型別為k.

C 3 0新特性 linq相關

隱含型別區域性變數 var age 26 var username zhuye var userlist new foreach var user in userlist console.writeline user 純粹給懶人用的var關鍵字,告訴編譯器 對於clr來說,它是不會知道你是否使用了v...

LINQ系列 C 中與LINQ相關特性

1.匿名型別 通過關鍵字var定義匿名型別,編譯器將根據運算子右側表示式的值來發出乙個強型別。使用匿名型別時要遵守的一些基本規則 匿名型別必須有乙個初始化值,而且這個值不能是空值 null 因為型別是根據初始化器推斷出來的 匿名型別可以用於簡單型別,也可以用於複雜型別。用於定義簡單型別時,其價值不大...

c 11語言新特性

模板的閉符之間不需要空格 vector 等同於 vector nullptr取代0或者null 以auto完成型別自動推導 一致性初始化與初值列 使用大括號進行初始化動作,如 int values vectorv 初值列如 int j j is initialized by 0 int p q is...