程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#學習筆記11

C#學習筆記11

編輯:C#入門知識

C#學習筆記11。本站提示廣大學習愛好者:(C#學習筆記11)文章只能為提供參考,不一定能成為您想要的結果。以下是C#學習筆記11正文


1.List.BinarySearch():BinarySearch()采用的是二分搜索算法,要求元素曾經排好序,其特點是假設元素沒有找到,會前往一個負整數,該值的按位取反(~)後果是“大於被查找元素的下一個元素”的索引,假如沒有更大的值,則是元素的總數。這樣一來就可以在列表中的特定地位方便地拔出新值,同時堅持已排序的形態。可檢查CollecationData.TestBinarySearch()代碼。要留意的是,假設事前沒有排好序,那麼不一定能找到一個元素,即是它的確在列表中。

2.Dictionary<TKey,TValue>的賦值:其賦值有2種方式,

(1)運用Add()辦法添加鍵值對元素,但是若添加了一個相反的鍵值,會引發一個異常。

(2)運用索引器賦值,如dictionary[key]=value,若沒有該鍵值則停止添加,若有該鍵值則停止掩蓋。

3.字典類是沒有特定的順序,元素運用散列碼存到一個散列表中,這樣可以完成疾速檢索。所以假如運用foreach循環來遍歷一個字典類,將不依照特定的順序來訪問值。

4.已排序的集合類:SortedDictionary<TKey,TValue>和SortedList<T>,對SortedDictionary<TKey,TValue>元素是依照鍵排序的,對SortedList<T>元素是依照值排序的。在一個已排序的集合中拔出或刪除元素時,由於要堅持集合中的元素順序,所以絕對後面描繪的普通集合,執行時間要稍長一些。可檢查CollecationData.TestSortedDictionary()代碼。

5.棧集合類Stack<T>:其元素是先進後出,三個關鍵的辦法是Push()、Pop()、Peek(),

(1)Push()將元素送入集合,元素不用是獨一的;

(2)Pop()依照與添加時相反的順序獲取並刪除元素;

(3)Peek()前往Pop()將獲取的下一個元素,但不修正棧中元素。

6.列隊集合Queue<T>:其元素遵照先入先出(元素不用是獨一的),運用Enqueue()停止入隊與Dequeue()停止出隊(出隊會移除元素),相當於一個管子的兩端。列隊集合依據需求自動增大,當不再需求數據的時分,我們運用TrimToSize()辦法來恢復以前的容量。

7.索引運算符:運用this[參數]停止聲明,內中含有get與set,索引運算符可以獲取多個參數,甚至可以重載。C#編譯器為索引運算符創立的CIL代碼是一個名為Item的特殊屬性索引器在CIL代碼中的屬性稱號默許為Item,但是可以運用IndexerName(標志屬性)來指定一個不同的稱號,當然在實踐運用中並無區別,它是它為不直接支持索引器的言語指定了稱號。編譯器能反省到這個特性,但是IndexerName標志屬性自身是不會在CIL輸入中呈現的,所以不能經過反射來運用它。

8.迭代器(yield)是如何任務的:C#編譯器遇到一個迭代器時,會依據枚舉數形式將代碼展開成恰當的CIL,在生成的代碼中,C#編譯器首先創立一個嵌套的private類來完成IEnumerator<T>接口,以及它的Current屬性和一個MoveNext()辦法,Current屬性前往與迭代器的前往類型對應的一個類型。

9.單個類創立多個迭代器(yield):有時分能夠希望不同的迭代順序、比方逆向迭代、對後果停止挑選等,為了在類中聲明額定的迭代器,你可以把它們封裝到前往IEnumerable<T>或IEnumrable的屬性或辦法中。

10.yield語句的特征:只要在前往IEnumerator<T>或許IEnumerable<T>類型的成員中,才干聲明yield return 語句。更詳細地說,只要在前往IEnumerator<T>的GetEnumerator()辦法中,或許在前往IEnumerable<T>但不叫做GetEnumerator()的辦法中,才干聲明yield return。

public class CollecationData
{
    public static void TestBinarySearch()
    {
        List<string> list = new List<string>() { "public", "protected", "private" };
        string item = "protected internal";
        list.Sort();
        int index = list.BinarySearch(item);
        if (index < 0)
        {
            list.Insert(~index, item);
        }
        list.ForEach(Console.WriteLine);
    }

    public static void TestSortedDictionary()
    {
        SortedDictionary<string, string> sortDict = new SortedDictionary<string, string>();
        int index = 0;
        sortDict.Add(index++.ToString(), "object");
        sortDict.Add(index++.ToString(), "byte");
        sortDict.Add(index++.ToString(), "uint");
        sortDict.Add(index++.ToString(), "ulong");
        sortDict.Add(index++.ToString(), "float");
        sortDict.Add(index++.ToString(), "char");
        sortDict.Add(index++.ToString(), "bool");
        sortDict.Add(index++.ToString(), "ushort");
        sortDict.Add(index++.ToString(), "decimal");
        sortDict.Add(index++.ToString(), "int");
        sortDict.Add(index++.ToString(), "sbyte");
        sortDict.Add(index++.ToString(), "short");
        sortDict.Add(index++.ToString(), "long");
        sortDict.Add(index++.ToString(), "void");
        sortDict.Add(index++.ToString(), "double");
        sortDict.Add(index++.ToString(), "string");
        Console.WriteLine("key  value   Hashcode");
        Console.WriteLine("---  -----   --------");
        foreach (KeyValuePair<string, string> item in sortDict)
        {
            Console.WriteLine("{0,-5}{1,-9}{2}", item.Key, item.Value, item.Key.GetHashCode());
        }
    }

    public static void TestDict()
    {
        Dictionary<string, string> dict = new Dictionary<string, string>();
        dict["1"] = "壹";
        dict.Add("2", "貳");
        foreach (var item in dict)
        {
            Console.WriteLine("key = {0} , value = {1}",item.Key,item.Value);
        }
    }
}

-------------------以上內容依據《C#實質論 第三版》停止整理

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved