1.C#基础语法
1.1 泛型
泛型是 C# 推出的一个重要语法,泛型允许在编写方法或类是定义一些未确定的类型参数。它提供了类型安全且高效的数据结构和算法,同时也可以避免装箱和拆箱操作,提高代码的复用性(编程时,出现相似的模块,这加大我们的工作量,如果使用泛型可以让多个类型共享一组代码)。
定义一个简单的泛型类定义和使用的例子:
MyGenericClass<T> 是一个泛型类,其中的类型 T 是一个类型参数。
在 Main 方法中,我们创建了两个 MyGenericClass 的实例,一个用于 int 类型,另一个用于 string 类型。这展示了泛型的一个常见用法,即用于不同数据类型的通用数据结构。
using System;
using System.Collections.Generic;// 定义一个泛型类
public class MyGenericClass<T>
{private T _value;public MyGenericClass(T value){_value = value;}public void DisplayValue(){Console.WriteLine(_value.ToString());}
}class Program
{static void Main(){// 创建一个泛型类的实例,指定泛型类型参数为intMyGenericClass<int> intClass = new MyGenericClass<int>(10);intClass.DisplayValue(); // 输出: 10// 创建一个泛型类的实例,指定泛型类型参数为stringMyGenericClass<string> stringClass = new MyGenericClass<string>("Hello World");stringClass.DisplayValue(); // 输出: Hello WorldConsole.ReadKey();}
} 
1.2 LinQ
LinQ是C#和VB中的统一查询语法,使用对象来保存和检索来自不同来源(如数据库、xml、对象集合)的数据。
主要功能:消除了编程语言和数据库之间的不匹配,以及为不同类型的数据源提供统一的查询接口。
适用范围:LInq适用于实现了IEnumerable <T>(IQueryable继承于IEnumerable )的实例,如:List,Dictionary,Queue,LinkedList,Array等。
linq的使用
有两种方法可以将LINQ查询写入IEnumerable集合或IQueryable数据源。
1、查询语法
特点:以from子句开头,可以以select或groupBy子句结束
2、lambda表达式(简洁且功能更多,推荐)
下边给出了简单的例子,注:后边的部分都是使用的这个测试数据。
//准备的测试数据IList<UserInfo> userList = new List<UserInfo>() {       new UserInfo() { UId = 1, UserName = "zs", Age = 23 ,RoleId=1} ,       new UserInfo() { UId = 2, UserName = "ls", Age = 20 ,RoleId=2},       new UserInfo() { UId = 3, UserName = "ww", Age = 33 ,RoleId=1},       new UserInfo() { UId = 4, UserName = "zl", Age = 26 ,RoleId=2},       new UserInfo() { UId = 5, UserName = "tq", Age = 42 ,RoleId=2}        };//用户列表            IList<RoleInfo> roleList = new List<RoleInfo>(){                new RoleInfo(){Rid=1,RoleName="管理员"},                new RoleInfo(){Rid=2,RoleName="普通用户"},            };//角色列表//query语法 var resUsers = from u in userList                where u.Age > 20                select new {u.UId,u.UserName,u.Age};//lambdavar resUsers2 = userList.Where<UserInfo>(u => u.Age > 20).Select(u => new { u.UId,u.UserName,u.Age}); 
linq详解
1、过滤 (where 和 oftype)
Where:根据给定的条件表达式过滤集合,并返回一个新集合
OfType:根据类型进行过滤
IList<object> list = new List<object>() { 1, "hello", user };//user是一个UserInfo的实例//query语法var result = from o in list.OfType<string>() select o;//lambda语法var result2 = list.OfType<string>(); 
2、排序(OrderBy,OrderByDescending,ThenBy,ThenByDescending)
//对userList先按Id排序,再按Age排序//query语法 var result = from u in userList                    orderby u.Id,u.Age descending                    select u;//lambda语法var result2 = userList.OrderByDescending(u => u.Id).ThenBy(u=>u.Age); 
3、分组(group by,ToLookUp)
//query语法 var resGroups = from u in userList group u by u.RoleId;//lambda方式  注:GroupBy延迟执行,而ToLookup是立即执行的,使用方法和GroupBy一样。var resGroups2 = userList.GroupBy(u => u.RoleId);//遍历(group.Key为设置分组的列的值)             foreach (var group in resGroups)              {                  Console.WriteLine("roleId:{0}", group.Key);                 foreach (UserInfo user in group)                 {                    Console.WriteLine("UserName:{0}", user.UserName);                 }             }             /*结果:  roleId:1                     UserName:zs                     UserName:ww                     roleId:2                     UserName:ls           UserName:zl 21  UserName:tq */    
//多列分组    var productGroup=        from p in db.Products        group p by new        {            p.PName,            p.PColor        }        into g        select new        {           g.Key,//这里的key是一个对象,有两个属性:PName,PColor           g        }; 
4、连接查询(join)
//query语法,查询用户名和该用户所属的角色 inner joinvar resJoin = from user in userList              join role in roleList              on user.RoleId equals role.Rid              select new              {                   uname=user.UserName,                   rname=role.RoleName               };//left join,right join调整下顺序即可var resJoin = from user in userList              join role in roleList              on user.RoleId equals role.Rid into temp          from tt in temp.DefaultIfEmpty              select new              {                    uname=user.UserName,                    rname=role?.RoleName              };//cross joinvar resJoin = from user in userList              from role in roleList              select new              {                   uname=user?.UserName,                   rname=role?.RoleName              };//lambda方式var resJoin2 = userList.Join(roleList,               user => user.RoleId,  //outkey               role => role.Rid,     //innerkey               (user, role) => new   //result               {                 uname = user.UserName,                 rname = role.RoleName               });//遍历foreach (var item in resJoin2){      Console.WriteLine("用户:{0}----角色:{1}", item.uname, item.rname);}  /*结果:  用户:zs----角色:管理员          用户:ls----角色:普通用户          用户:ww----角色:管理员          用户:zl----角色:普通用户          用户:tq----角色:普通用户 */