MVC學習之前必須掌握的c#基礎知識

来源:http://www.cnblogs.com/M-LittleBird/archive/2016/09/07/5850285.html
-Advertisement-
Play Games

一.類自動屬性 1 public class Person 2 { 3 //自動屬性 4 public string Name { get; set; } 5 6 private int _age; 7 8 public int age { 9 get { return _age; } 10 set ...


一.類自動屬性

  1 public class Person
  2     {
  3         //自動屬性
  4        public string Name { get; set; }
  5 
  6         private int _age;
  7 
  8         public int age {
  9             get { return _age; }
 10             set { _age = value; }
 11         }
 12     }
View Code

Name為類的自動屬性,其實跟下麵age的定義方法是一樣的,只不過是微軟自動幫你生成了欄位。

二.隱式類型

  1         static void Var()
  2         {
  3             var person = new Person();
  4 
  5             var p = person;
  6         }
View Code

1.var類型會被編譯器根據初始值的類型自動推斷出具體的類型。

2. var類型不能做參數。

3.無法將null賦值給var類型。

4.語句中只聲明一次變數,聲明後不能更改類型。

三、匿名類

  1         static void W02AnmClass()
  2         {
  3             var d = new { name = "張三", age = 13 };
  4             var d2 = new { name = 12, age = "13" };
  5             var d3 = new { name = "張三", age = "13", gender=""};
  6         }
View Code

1.匿名類本質上是編譯器生成的一個泛型類。

2.當匿名類的參數個數一樣的時候是共用一個泛型類。

3.當匿名類的參數個數不一樣的時候是各自生成不同的泛型類。

4.匿名類初始化的時候一定要賦值。

四、預設值和命名參數

  1  static void W03DefaultValue()
  2         {
  3             W0301();
  4             W0301("李四");
  5             W0301(age: 20);
  6         }
  7         static void W0301(string name="張三",int age=18)
  8         {
  9             Person person = new Person();
 10             person.Name = name;
 11             person.Age = age;
 12         }
View Code

1.當一個方法裡面的參數有預設值的時候,可以直接調用方法不用傳值,編譯器會自動調用參數的值。

2.當方法有預設值時,如果調用的時候只傳入第一個參數,那麼編譯器會把第二個參數設置為預設值。

3.如果需要給某一個參數賦值,書寫的格式是 參數名:值。

五、對象/集合初始化器

  1  static void W0401Object()
  2         {
  3             Person person = new Person() {
  4                 Name="張三",
  5                 Age=23
  6             };
  7         }
  8         static void W0402Object()
  9         {
 10             var personlist = new List<Person>() {
 11                 new Person() {Name="張三",Age=22 },
 12                 new Person() {Name="李四",Age=12 }
 13             };
 14         }
 15         static void W0403Object()
 16         {
 17             Person[] arrperson = new Person[] {
 18                 new Person() {Name="張三",Age=22 }
 19             };
 20         }
View Code

1.對象/集合初始化器,可以在new一個對象或者集合的時候,直接在後面加{}裡面對屬性直接賦值或者直接new一個對象給集合。

六、匿名方法(匿名函數、匿名委托)

  1        static bool Process(int p)
  2         {
  3             return p > 2;
  4         }
  5 
  6         static void W0401()
  7         {
  8             List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
  9             //直接傳入一個方法名稱也可以不過這個方法名稱的參數以及返回值類型要跟
 10             //public delegate bool Predicate<in T>(T obj);一樣
 11             var nlist =list.FindAll(Process);
 12             foreach (var item in nlist)
 13             {
 14                 Console.WriteLine(item);
 15             }
 16 
 17             Console.WriteLine("=================");
 18             //匿名方法的寫法:delegate(編寫匿名方法的參數,參數有程式員自己定義){函數的方法體代碼}
 19             var nlist2 = list.FindAll(delegate (int p) { return p > 3; });
 20             foreach (var item in nlist2)
 21             {
 22                 Console.WriteLine(item);
 23             }
 24         }
View Code

七、lambda表達式的推斷以及書寫方法

  1  List<Person> persons = new List<Person>() {
  2                 new Person { Name="張三",Age=12},
  3                  new Person { Name="李四",Age=32},
  4                   new Person { Name="王五",Age=44}
  5             };
  6             //使用匿名方法返回符合條件的數據。
  7             var nlistperson= persons.FindAll(delegate (Person person) { return person.Age > 22 && person.Name.Contains(""); });
  8             //lambda表達式的推斷使用goto語句來替換匿名函數   =>
  9             var nlistperson2 = persons.FindAll((Person person)=> { return person.Age > 22 && person.Name.Contains(""); });
 10 
 11             /*
 12              1、lambda表達式的推斷使用goto語句來替換匿名函數   => 繼續簡化
 13              2、當只有一個參數的時候可以省略()參數的括弧,當返回值只有一句語句的時候可以省略return以及{}花括弧
 14              3、當有多個參數的時候需要加上(),當有多條語句的時候需要添加{}每個語句後面加分號;最後返回的語句要加return
 15              */
 16             var nlistperson3 = persons.FindAll(person => person.Age > 22 && person.Name.Contains(""));
 17 
 18             var nlistperson4 = persons.FindAll(person => {
 19                 person.Age++;
 20                 return person.Age > 22 && person.Name.Contains("");
 21             });
 22 
 23             foreach (var item in nlistperson4)
 24             {
 25                 Console.WriteLine("名稱:{0};年齡:{1}",item.Name,item.Age);
 26             }
View Code

八、擴展方法

  1  /// <summary>
  2         /// 1.擴展方法必須是一個靜態方法
  3         /// 2.靜態方法必須放在靜態類中
  4         /// 3.擴展方法第一個參數必須是this開頭,並且指定擴展方法是哪個類型上的
  5         /// 4.擴展方法只能有指定的類型才能點出來
  6         /// 5.擴展方法的this後面的參數不屬於 方法的參數
  7         /// 6.如果擴展方法跟實例方法同名,先調用實例方法
  8         /// 7.子類可以調用父類的擴展方法
  9         /// 8.介面上的擴展方法可以被實現類的對象直接使用
 10         /// 9.擴展方法的本質,最終還是被編譯器編譯成了 靜態類.靜態方法()
 11         /// </summary>
 12         static void W0601()
 13         {
 14             DateTime dt = DateTime.Now;
 15             string fmtstr= dt.FmtDate();
 16         }
View Code
  1  public static class ExtHelper
  2     {
  3         public static string FmtDate(this DateTime dt)
  4         {
  5             return dt.ToString("YYYY-MM-DD HH:MM:ss");
  6         }
  7         public static string FmtDate(this DateTime dt,string str)
  8         {
  9             return dt.ToString("YYYY-MM-DD HH:MM:ss"+str);
 10         }
 11     }
View Code

九、系統內置的委托

  1  #region 系統內置委托
  2         #region Action委托 接收參數 無法回值
  3         static void W0701Action()
  4         {
  5             List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6 };
  6 
  7             list.ForEach(i => Console.WriteLine(i));
  8         }
  9         #endregion
 10 
 11         #region Predicate 泛型委托:接收一個參數,返回bool類型
 12         static void W0702Predicate()
 13         {
 14             var list = new List<Person>(){
 15                 new Person { Name = "張三", Age = 12 },
 16                 new Person { Name = "李四", Age = 32 },
 17                 new Person { Name = "王五", Age = 44 }
 18             };
 19 
 20             var nlist = list.FindAll(c => c.Age > 22);
 21             //獲取當前list集合中,名字為張三的對象,如果有多個只返回第一個
 22 
 23             var person = list.Find(c => c.Name == "張三");
 24         }
 25         #endregion
 26 
 27         #region Func:接收參數,返回參數,但是不固定
 28         static void W0703Func()
 29         {
 30             var list = new List<Person>(){
 31                 new Person { Name = "張三", Age = 12 },
 32                 new Person { Name = "李四", Age = 32 },
 33                 new Person { Name = "王五", Age = 44 }
 34             };
 35 
 36             var nlist = list.Where(c => c.Age > 1);
 37             var nlist1 = nlist.ToList();
 38             nlist1.ForEach(c => Console.WriteLine(c.Name.ToString()));
 39         }
 40         #endregion
 41 
 42         #region System.Comparison<T> 返回一個整數,接收兩個同類型的參數
 43         static void W0704Comparison()
 44         {
 45             var list = new List<Person>(){
 46                 new Person { Name = "張三", Age = 12 },
 47                 new Person { Name = "李四", Age = 32 },
 48                 new Person { Name = "王五", Age = 44 }
 49             };
 50 
 51             list.Sort((p, n) =>p.Age - n.Age);
 52             list.ForEach(c=>Console.WriteLine(c.Name.ToString()+":"+c.Age.ToString()));
 53         }
 54 
 55         #endregion
 56         #endregion
View Code

十、SQO方法 -標準查詢運算符

創建兩個類

  1  public class Person
  2     {
  3         public int TypeID { get; set; }
  4 
  5         public int ID { get; set; }
  6         //自動屬性
  7         public string Name { get; set; }
  8 
  9         private int _age;
 10 
 11         public int Age {
 12             get { return _age; }
 13             set { _age = value; }
 14         }
 15 
 16         public override string ToString()
 17         {
 18             return "ID=" + this.ID + "名稱=" + this.Name + ",年齡=" + this.Age + "所屬類別=" + this.TypeID;
 19         }
 20     }
 21 
 22     public class PsersonType
 23     {
 24         public int TypeID { get; set; }
 25         public string TName { get; set; }
 26     }
View Code

SQO常用方法的使用 查詢、排序、關聯、分組等

  1         #region SQO方法 -標準查詢運算符
  2         #region 1 where() firstordefult() LastOrDefault方法進行查找操作 (鏈式編程)
  3         static void W0801()
  4         {
  5             var list = new List<Person>(){
  6                 new Person { Name = "張三", Age = 12 },
  7                 new Person { Name = "李四", Age = 32 },
  8                 new Person { Name = "王五", Age = 44 }
  9             };
 10 
 11             //利用where查找出list中年齡大於22或者名稱叫王五
 12             //鏈式編程
 13             list.Where(c => c.Age > 5 || c.Name == "王五").ToList().ForEach(c => Console.WriteLine(c.ToString()));
 14 
 15             //firstordefult()的演示
 16            var person= list.FirstOrDefault(c => c.Age > 5 || c.Name == "王五");
 17             Console.WriteLine(person.ToString());
 18 
 19             //獲取集合中滿足條件的最後一個元素
 20             var person2 = list.LastOrDefault(c => c.Age > 5 || c.Name == "王五");
 21             Console.WriteLine(person.ToString());
 22 
 23         }
 24         #endregion
 25 
 26         #region 2 對集合進行排序(正序和倒序)
 27         static void W0802()
 28         {
 29             var list = new List<Person>(){
 30                 new Person {ID=1, Name = "張三", Age = 12,TypeID=1 },
 31                 new Person {ID=2,Name = "李四", Age = 32 ,TypeID=2},
 32                 new Person {ID=3,Name = "王五", Age = 44 ,TypeID=1}
 33             };
 34             //正序
 35             list.OrderBy(c => c.Age).ToList().ForEach(c => Console.WriteLine(c.ToString()));
 36             Console.WriteLine("---------");
 37             //倒序
 38             list.OrderByDescending(c => c.Age).ToList().ForEach(c => Console.WriteLine(c.ToString()));
 39         }
 40         #endregion
 41 
 42         #region 3 根據多個欄位的組合排序
 43         static void W0803()
 44         {
 45             var list = new List<Person>(){
 46                 new Person {ID=1, Name = "張三", Age = 12,TypeID=1 },
 47                 new Person {ID=2,Name = "李四", Age = 32 ,TypeID=2},
 48                 new Person {ID=3,Name = "王五", Age = 44 ,TypeID=1}
 49             };
 50             //多個條件進行正序 先按照年齡然後按照ID正序
 51             list.OrderBy(c => c.Age).ThenBy(c => c.ID).ToList().ForEach(c => Console.WriteLine(c.ToString()));
 52 
 53             //多條件倒序
 54             list.OrderByDescending(c => c.Age).ThenByDescending(c => c.ID).ToList().ForEach(c => Console.WriteLine(c.ToString()));
 55         }
 56         #endregion
 57 
 58         #region 4 投影方法(Select) ( 重點 )
 59         static void W0804()
 60         {
 61             var list = new List<Person>(){
 62                 new Person {ID=1, Name = "張三", Age = 12,TypeID=1 },
 63                 new Person {ID=2,Name = "李四", Age = 32 ,TypeID=2},
 64                 new Person {ID=3,Name = "王五", Age = 44 ,TypeID=1}
 65             };
 66             //取出list集合裡面的部分欄位
 67             List<string> nlist = list.Select(c => c.Name).ToList();
 68 
 69             //重新創建一個新的list集合只包含name和age
 70             list.Select(c => new { N = c.Name, A = c.Age }).ToList().ForEach(c => Console.WriteLine(c.ToString()));
 71         }
 72         #endregion
 73 
 74         #region 5 分頁方法 Skip(skipNum).Take(頁容量)  Skip():表示跳過集合中的前面多少行
 75         static void W0805()
 76         {
 77             int rowcount = 0;
 78             W0805ByPage(1, 2, out rowcount).ForEach(c => Console.WriteLine(c.ToString()));
 79         }
 80         static List<Person> W0805ByPage(int pageindex, int pagesize, out int rowcount)
 81         {
 82             var list = new List<Person>(){
 83                 new Person {ID=1, Name = "張三", Age = 12,TypeID=1 },
 84                 new Person {ID=2,Name = "李四", Age = 32 ,TypeID=2},
 85                 new Person {ID=3,Name = "王五", Age = 44 ,TypeID=1}
 86             };
 87            // 給rowcount賦予滿足條件的數據總行數
 88             rowcount = list.Count();
 89             //經過第幾頁跳過跳過多少條
 90             int skipCount = (pageindex - 1) * pagesize;
 91             return list.Where(c => c.Age > 1).Skip(skipCount).Take(pagesize).ToList();
 92         }
 93         #endregion
 94 
 95         #region 6 連表查詢Join
 96         static void W0806()
 97         {
 98             var list = new List<Person>(){
 99                 new Person {ID=1, Name = "張三", Age = 12,TypeID=1 },
100                 new Person {ID=2,Name = "李四", Age = 32 ,TypeID=2},
101                 new Person {ID=3,Name = "王五", Age = 44 ,TypeID=1},
102                  new Person {ID=3,Name = "王五", Age = 44 ,TypeID=3}
103             };
104 
105             var typelist = new List<PsersonType>()
106             {
107                 new PsersonType(){TypeID=1,TName="老師"},
108                     new PsersonType(){TypeID=3,TName="學生"},
109                     new PsersonType(){ TypeID=2, TName="保全"}
110             };
111 
112             //利用SQO方法Join() 來實現上述業務邏輯
113             var nlist = list.Join(typelist, p => p.TypeID, c => c.TypeID, (p, c) =>new { p.Name,p.Age,c.TName }).ToList();
114 
115             nlist.ForEach(c => Console.WriteLine(c.ToString()));
116         }
117         #endregion
118 
119         #region 7 分組 GroupBy()
120         static void W0807()
121         {
122             var list = new List<Person>(){
123                 new Person {ID=1, Name = "張三", Age = 12,TypeID=1 },
124                 new Person {ID=2,Name = "李四", Age = 32 ,TypeID=2},
125                 new Person {ID=3,Name = "王五", Age = 44 ,TypeID=1},
126                  new Person {ID=3,Name = "王五", Age = 44 ,TypeID=3}
127             };
128 
129             //利用SQO方法進行分組操作
130             list.GroupBy(c => c.TypeID).ToList().ForEach(c => {
131                 Console.WriteLine("----分組號{0}" + c.Key,c.ToList().Count());
132                 c.ToList().ForEach(g => Console.WriteLine(g.ToString()));
133             });
134         }
135         #endregion
136         #endregion
View Code

十一、linq的常用方法

  1  #region  Linq使用方法
  2         #region 1 Linq實現排序
  3         static void w0901()
  4         {
  5             var list = new List<Person>(){
  6                 new Person {ID=1, Name = "張三", Age = 12,TypeID=1 },
  7                 new Person {ID=2,Name = "李四", Age = 32 ,TypeID=2},
  8                 new Person {ID=3,Name = "王五", Age = 44 ,TypeID=1},
  9                  new Person {ID=3,Name = "王五", Age = 44 ,TypeID=3}
 10             };
 11             //需求:根據list集合中的age倒序排列後取出pig對象中的Name和Age
 12             //ascending :正序   descending:倒序
 13             var orderbyList = (from c in list
 14                                orderby c.Age descending
 15                                select new { c.Name, c.Age }).ToList();
 16             orderbyList.ForEach(c => Console.WriteLine(c.ToString()));
 17         }
 18         #endregion
 19 
 20         #region 2 LinqJoin實現集合的鏈接查詢
 21         static void W0902()
 22         {
 23             var list = new List<Person>(){
 24                 new Person {ID=1, Name = "張三", Age = 12,TypeID=1 },
 25                 new Person {ID=2,Name = "李四", Age = 32 ,TypeID=2},
 26                 new Person {ID=3,Name = "王五", Age = 44 ,TypeID=1},
 27                  new Person {ID=3,Name = "王五", Age = 44 ,TypeID=3}
 28             };
 29 
 30             var typelist = new List<PsersonType>()
 31             {
 32                 new PsersonType(){TypeID=1,TName="老師"},
 33                     new PsersonType(){TypeID=3,TName="學生"},
 34                     new PsersonType(){ TypeID=2, TName="保全"}
 35             };
 36 
 37             var nlist = (from c in list
 38                          join t in typelist
 39                          on c.TypeID equals t.TypeID
 40                          select new { c.Name, c.ID, t.TName }).ToString();
 41 
 42         }
 43         #endregion
 44 
 45         #region Linq分組
 46         static void W0903()
 47         {
 48             var list = new List<Person>(){
 49                 new Person {ID=1, Name = "張三", Age = 12,TypeID=1 },
 50                 new Person {ID=2,Name = "李四", Age = 32 ,TypeID=2},
 51                 new Person {ID=3,Name = "王五", Age = 44 ,TypeID=1},
 52                  new Person {ID=3,Name = "王五", Age = 44 ,TypeID=3}
 53             };
 54 
 55             var groupbylist = (from c in list
 56                                group c by c.TypeID).ToList();
 57 
 58             groupbylist.ForEach(c =>
 59             {
 60                 Console.WriteLine("-----分組號=" + c.Key);
 61                 c.ToList().ForEach(g => Console.WriteLine(g.ToString()));
 62             });
 63 
 64         }
 65         #endregion
 66         #endregion
View Code
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 註意:枚舉類型和結構體都屬於值類型。 結構體:就是一個自定義的集合,裡面可以放各種類型的元素,用法大體跟集合一樣。 一、定義的方法: struct student { public int nianling; public int fenshu; public string name; public ...
  • 自定義CheckBox樣式,mark一下,方便以後參考復用 設計介紹: 1、一般CheckBox模板太難看了,肯定要重寫其中的模板 2、模板狀態為未選中狀態和選中狀態,設置為預設未選中就好了。 預設狀態,設置邊框、透明度等 選中的話,我們可以設置√和背景。 當然如果需要點動畫的話,可以添加個Stro ...
  • 本節講述佈局,順帶加點樣式給大家看看~單純學佈局,肯定是枯燥的~哈哈 那如上界面,該如何設計呢? 1、一些佈局元素經常用到.Grid StackPanel Canvas WrapPanel等。如上這種佈局,在子元素數量未知的情況下,我們應該使用WrapPanel或者StackPanel來佈局,子元素 ...
  • ASP.NET MVC Core 的控制器可以利用視圖返回格式化結果。 ...
  • 預設情況下,ASP.NET應用程式以本機的ASPNET帳號運行,該帳號屬於普通用戶組,許可權受到一定的限制,以保障ASP.NET應用程式運行的安全。但是有時需要某個ASP.NET應用程式或者程式中的某段代碼執行需要特定許可權的操作,比如某個文件的存取,這時就需要給該程式或相應的某段代碼賦予某個帳號的許可權 ...
  • 代碼: 效果圖: ...
  • 雖然有很多話想多,但是提筆才發現自己的語言組織能力有多差,差到不知道從何說起。 今日如往常一樣的修改bug,遇到解決不了的問題直接複製到百度里。通過網路站在前人的肩膀上真的是一件非常爽的事情,基本上第一頁看不完就能把問題解決完,更爽的是,你既可以獲得清晰的步驟去解決想解決眼下的問題,又可以深究其原理 ...
  • .NetCore中的日誌(1)日誌組件解析 0x00 問題的產生 日誌記錄功能在開發中很常用,可以記錄程式運行的細節,也可以記錄用戶的行為。在之前開發時我一般都是用自己寫的小工具來記錄日誌,輸出目標包含控制台、文本文件、資料庫,一般都是創建全局的Logger,在需要記錄日誌的地方調用相應的Logge ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...