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

C#學習筆記10

編輯:C#入門知識

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


1.匿名類型:匿名類型是C#3.0新增的特性,是強類型(由編譯器後台在生成為CIL時,自動聲明的代碼定義類型),聲明與初始化屬性後其屬性是盡讀屬性。只要在屬性的稱號、順序、類型分歧時,多個聲明匿名變量才會共用同一個匿名類型。其ToString()辦法已重寫了前往的是屬性稱號與值的文本。

2.隱式部分變量:在運用var聲明部分變量時,應該留意2點,辨別為

(1)可以從賦值“=”左邊的類型分明知道右邊的類型聲明,如 new FileInfo("") 可以明白知道是文件烈性,可以運用var。但是左邊若是一個辦法調用,則應該顯式聲明類型。便於知道前往類型,而不必進入辦法外部檢查。

(2)普通在運用匿名類型時可以運用var,由於不能明白知道編譯生成的類型。但在運用Linq等規范查詢運算符中應該運用顯式聲明,如IEnumerable<string> result 比 var result更具可讀性。

3.foreach循環內不要修正集合。

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

(1)理想狀況下,集合應該完成了ICollecation<T>接口,這樣就可以保證集合支持一個Add()辦法,編譯器生成的代碼可以調用這個Add()辦法,

(2)寬松狀況下,集合應該完成了IEnumerable<T>接口,其存在一個或多個Add()辦法,即便集合類型沒有完成ICollecation<T>接口,Add()辦法需求承受與集合初始化器中指定的值兼容的參數。

  留意,匿名類型是不能直接運用集合初始化器的,由於集合初始化器需求執行一次結構器的調用,但你基本沒法命名這個結構器。有2種方式,

(1)定義一個像上面這樣的辦法,經過調用該辦法即可創立匿名類型的集合,(static List<T> CreateList<T>(T t) { return new List<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
{
    public static Department[] Departments = new Department[]
    {
         new Department(){Id = "1",Name = "法務部"},
         new Department(){Id = "2",Name = "信息部"},
         new Department(){Id = "3",Name = "市場部"},
         new Department(){Id = "4",Name = "財務部"},
         new Department(){Id = "5",Name = "行政部"}
    };
    public static Employee[] Employees = new Employee[]
    {
        new Employee() {No = "01",Name = "柳一",CallName = "主管",DepartmentId = "1"},
        new Employee() {No = "01",Name = "徐二",CallName = "主管",DepartmentId = "1"},
        new Employee() {No = "01",Name = "張三",CallName = "主管",DepartmentId = "3"},
        new Employee() {No = "01",Name = "李四",CallName = "主管",DepartmentId = "3"},
        new Employee() {No = "01",Name = "王五",CallName = "主管",DepartmentId = "2"},
        new Employee() {No = "01",Name = "朱六",CallName = "主管",DepartmentId = "2"},
        new Employee() {No = "01",Name = "彥七",CallName = "主管",DepartmentId = "4"},
        new Employee() {No = "01",Name = "毛八",CallName = "主管",DepartmentId = "4"},
        new Employee() {No = "01",Name = "黃九",CallName = "主管",DepartmentId = "4"},
        new Employee() {No = "01",Name = "成十",CallName = "主管",DepartmentId = "4"}
    };

    //集合左外銜接處置
    public static void GetLeftInnerData()
    {
        var result = Departments.GroupJoin(Employees, d => d.Id, e => e.DepartmentId,
                (d, dEmployees) => new { d.Id, d.Name, Employees = dEmployees })
                .SelectMany(departmentEmployees => departmentEmployees.Employees.DefaultIfEmpty(),
                    (d, e) => new { d.Name, employee = e });
        foreach (var item in result)
        {
            Console.WriteLine("department : {0}, employee : {1}", item.Name, item.employee);
        }
    }

    //分組集合
    public static void GetGroupBy()
    {
        IEnumerable<IGrouping<string, Employee>> result = Employees.GroupBy(e => e.DepartmentId);
        foreach (IGrouping<string, Employee> item in result)
        {
            Console.WriteLine(item.Key);
            foreach (Employee employee in item)
            {
                Console.WriteLine("\t{0}", employee);
            }
        }
    }
}

public class Department
{
    public string Id;
    public string Name;
}

public class Employee
{
    public string No;
    public string Name;
    public string CallName;
    public string DepartmentId;

    public override string ToString()
    {
        return string.Format("Name={0}, CallName={1}", Name, CallName);
    }
}

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

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