小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

C#學(xué)習(xí)筆記

 MyFinoa 2017-10-22

1、LINQ特有的編程結(jié)構(gòu)

隱式類型本地變量:C#的var關(guān)鍵字允許定義不顯式指定實(shí)際數(shù)據(jù)類型的本地變量。不過由于編譯器將根據(jù)初始值推斷其數(shù)據(jù)類型,所有該變量仍然是強(qiáng)類型的。

對象和集合初始化語法:它允許我們在創(chuàng)建類或結(jié)構(gòu)變量的同時(shí)設(shè)置其屬性。

Lambda表達(dá)式:C#Lambda操作符(=>)可以用來構(gòu)建Lambda表達(dá)式,并且在調(diào)用以強(qiáng)類型的委托作為參數(shù)的方法時(shí),也十分有用。

擴(kuò)展方法:C#擴(kuò)展方法不使用子類就能夠像已知類中添加新的功能。同樣,它還可以向不能有子類的密封類和結(jié)構(gòu)中添加新的功能。在編寫擴(kuò)展方法時(shí),第一個(gè)參數(shù)必須使用this限定符,用來表示被擴(kuò)展的類型。擴(kuò)展方法只能定義在靜態(tài)類中,并且必須使用static關(guān)鍵字聲明為靜態(tài)方法。

匿名類型:該特性可以快速建立數(shù)據(jù)的“結(jié)構(gòu)”,編譯器將根據(jù)名稱/值對的結(jié)合在編譯時(shí)生成新的類。該類型是基于值的語義構(gòu)建的,因此System.object中的每個(gè)虛方法都要重寫。要定義一個(gè)匿名類型,可以聲明一個(gè)隱式類型變量,并使用對象初始化語法指定數(shù)據(jù)的結(jié)構(gòu)。

2、LINQ查詢表達(dá)式是強(qiáng)類型的(跟傳統(tǒng)的SQL語句有所不同)。

3、核心LINQ程序集

System.Core.dll:定義了代表核心LINQ API的類型;

System.Data.DataSetExtensions.dll:定義了許多類型來將ADO.NET類型融入LINQ變成范式;

System.Xml.Linq.dll:提供了使用LINQ處理XML文檔數(shù)據(jù)所需的功能。

4、將LINQ查詢應(yīng)用于原始數(shù)組

復(fù)制代碼
 1         static void Main(string[] args)
2 {
3 QueryOverStrings();
4 Console.ReadLine();
5 }
6
7 static void QueryOverStrings()
8 {
9 //假定我們有一個(gè)字符串?dāng)?shù)組
10 string[] currentVideoGames = { "Morrowind", "Uncharted2", "Fallout 3", "Daxter", "System Shock 2" };
11
12 //構(gòu)建一個(gè)查詢表達(dá)式,來代表數(shù)組中有一個(gè)空格的項(xiàng)
13 IEnumerable<string> subset = from g in currentVideoGames where g.Contains(" ") orderby g select g;
14
15 //輸出結(jié)果
16 foreach (string s in subset)
17 Console.WriteLine(s);
18 }
復(fù)制代碼

一般來說,在獲取LINQ查詢的結(jié)果集時(shí),應(yīng)該總是使用隱式類型。但要記住的是,在絕大多數(shù)情況下,真正的返回值是實(shí)現(xiàn)了泛型IEnumerable<T>接口的類型。

復(fù)制代碼
        static void QueryOverInts()
{
int[] numbers = { 10, 20, 30, 40, 1, 2, 3, 8};

//只輸出小于10的項(xiàng)
//使用隱式類型
var subset = from i in numbers where i < 10 select i;

foreach (var i in subset)
Console.WriteLine(i);
ReflectOverQueryResults(subset);
}
復(fù)制代碼

5、LINQ和擴(kuò)展方法:雖然System.Array并沒有直接實(shí)現(xiàn)IEnumerable<T>接口,但它通過靜態(tài)的System.Linq.Enumerable類類型間接地得到了該類型所需的功能,同時(shí)還得到了許多其他的與LINQ相關(guān)成員。

6、延遲執(zhí)行的作用:有關(guān)LINQ查詢表達(dá)式另一個(gè)重要的地方是在我們迭代內(nèi)容之前,它們不會真正進(jìn)行運(yùn)算,嚴(yán)格的說叫做延遲執(zhí)行。這個(gè)方式的好處在于可以為相同的容器多次應(yīng)用相同的LINQ查詢,而始終可以獲得最新的最好的結(jié)果。

復(fù)制代碼
 1         static void QueryOverInts()
2 {
3 int[] numbers = { 10, 20, 30, 40, 1, 2, 3, 8};
4
5 //只輸出小于10的項(xiàng)
6 //使用隱式類型
7 var subset = from i in numbers where i < 10 select i;
8
9 foreach (var i in subset)
10 Console.WriteLine(i);
11 Console.WriteLine();
12
13 //修改一些數(shù)據(jù)
14 numbers[0] = 4;
15
16 //再一次運(yùn)算
17 foreach (var j in subset)
18 Console.WriteLine(j);
19 Console.WriteLine();
20
21 ReflectOverQueryResults(subset);
22 }
復(fù)制代碼

7、立即執(zhí)行的作用:如果希望foreach邏輯外部運(yùn)算LINQ表達(dá)式,可以調(diào)用由Enumerable類型定義的許多擴(kuò)展方法來完成。Enumerable定義了諸如ToArray<T>()、ToDictionary<TSource,TKey>()以及ToList<T>()在內(nèi)的許多擴(kuò)展方法。在調(diào)用這些方法的同時(shí)將執(zhí)行LINQ查詢,以獲取數(shù)據(jù)快照。然后這些數(shù)據(jù)快照就可以獨(dú)立進(jìn)行操作了:

復(fù)制代碼
 1         static void ImmediateExecution()
2 {
3 int[] numbers = { 10, 20, 30, 40, 1, 2, 3, 8 };
4
5 //立即獲取數(shù)據(jù)為int[]
6 int[] subsetAsIntArray =
7 (from i in numbers where i < 10 select i).ToArray();
8
9 //立即獲取數(shù)據(jù)為List<int>
10 List<int> subsetAsListOfInts =
11 (from i in numbers where i < 10 select i).ToList();
12 }
復(fù)制代碼

整個(gè)LINQ表達(dá)式用圓括號括起來,這樣就能將它強(qiáng)制轉(zhuǎn)換為正確的實(shí)際類型來調(diào)用Enumerable的擴(kuò)展方法。C#編譯器可以準(zhǔn)確檢測泛型項(xiàng)的類型參數(shù),我們不需要指定類型參數(shù)。

8、返回LINQ查詢的結(jié)果

9、將查詢應(yīng)用到集合對象

10、C#LINQ查詢操作符



    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多