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

一.類自動屬性html

  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類型會被編譯器根據初始值的類型自動推斷出具體的類型。ide

2. var類型不能作參數。函數

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

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

3、匿名類spa

  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.匿名類本質上是編譯器生成的一個泛型類。code

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

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

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

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.若是須要給某一個參數賦值,書寫的格式是 參數名:值。

5、對象/集合初始化器

  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一個對象給集合。

6、匿名方法(匿名函數、匿名委託)

  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

7、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              一、lambda表達式的推斷使用goto語句來替換匿名函數   => 繼續簡化
 13              二、當只有一個參數的時候能夠省略()參數的括號,當返回值只有一句語句的時候能夠省略return以及{}花括號
 14              三、當有多個參數的時候須要加上(),當有多條語句的時候須要添加{}每一個語句後面加分號;最後返回的語句要加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

8、擴展方法

  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

9、系統內置的委託

  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

10、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

11、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

 

出處:http://www.cnblogs.com/M-LittleBird/p/5850285.html

相關文章
相關標籤/搜索