当前位置:   article > 正文

C# 基础语法 学习笔记

C# 基础语法 学习笔记

1.C#基础语法

1.1 泛型

泛型是 C# 推出的一个重要语法,泛型允许在编写方法或类是定义一些未确定的类型参数。它提供了类型安全高效的数据结构和算法,同时也可以避免装箱和拆箱操作,提高代码的复用性(编程时,出现相似的模块,这加大我们的工作量,如果使用泛型可以让多个类型共享一组代码)。

定义一个简单的泛型类定义和使用的例子:

MyGenericClass<T> 是一个泛型类,其中的类型 T 是一个类型参数。

在 Main 方法中,我们创建了两个 MyGenericClass 的实例,一个用于 int 类型,另一个用于 string 类型。这展示了泛型的一个常见用法,即用于不同数据类型的通用数据结构

  1. using System;
  2. using System.Collections.Generic;
  3. // 定义一个泛型类
  4. public class MyGenericClass<T>
  5. {
  6. private T _value;
  7. public MyGenericClass(T value)
  8. {
  9. _value = value;
  10. }
  11. public void DisplayValue()
  12. {
  13. Console.WriteLine(_value.ToString());
  14. }
  15. }
  16. class Program
  17. {
  18. static void Main()
  19. {
  20. // 创建一个泛型类的实例,指定泛型类型参数为int
  21. MyGenericClass<int> intClass = new MyGenericClass<int>(10);
  22. intClass.DisplayValue(); // 输出: 10
  23. // 创建一个泛型类的实例,指定泛型类型参数为string
  24. MyGenericClass<string> stringClass = new MyGenericClass<string>("Hello World");
  25. stringClass.DisplayValue(); // 输出: Hello World
  26. Console.ReadKey();
  27. }
  28. }

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表达式(简洁且功能更多,推荐)

下边给出了简单的例子,注:后边的部分都是使用的这个测试数据。

  1. //准备的测试数据
  2. IList<UserInfo> userList = new List<UserInfo>() {
  3.        new UserInfo() { UId = 1, UserName = "zs", Age = 23 ,RoleId=1} ,
  4.        new UserInfo() { UId = 2, UserName = "ls", Age = 20 ,RoleId=2},
  5.        new UserInfo() { UId = 3, UserName = "ww", Age = 33 ,RoleId=1},
  6.        new UserInfo() { UId = 4, UserName = "zl", Age = 26 ,RoleId=2},
  7.        new UserInfo() { UId = 5, UserName = "tq", Age = 42 ,RoleId=2}
  8.         };//用户列表
  9.             IList<RoleInfo> roleList = new List<RoleInfo>(){
  10.                 new RoleInfo(){Rid=1,RoleName="管理员"},
  11.                 new RoleInfo(){Rid=2,RoleName="普通用户"},
  12.             };//角色列表
  13. //query语法
  14.  var resUsers = from u in userList
  15.                 where u.Age > 20
  16.                 select new {u.UId,u.UserName,u.Age};
  17. //lambda
  18. var resUsers2 = userList.Where<UserInfo>(u => u.Age > 20).Select(u => new { u.UId,u.UserName,u.Age});

linq详解

1、过滤 (where 和 oftype)

Where:根据给定的条件表达式过滤集合,并返回一个新集合

OfType:根据类型进行过滤

  1. IList<object> list = new List<object>() { 1, "hello", user };//user是一个UserInfo的实例
  2. //query语法
  3. var result = from o in list.OfType<string>() select o;
  4. //lambda语法
  5. var result2 = list.OfType<string>();

2、排序(OrderBy,OrderByDescending,ThenBy,ThenByDescending)

  1. //对userList先按Id排序,再按Age排序
  2. //query语法
  3.  var result = from u in userList
  4.                     orderby u.Id,u.Age descending
  5.                     select u;
  6. //lambda语法
  7. var result2 = userList.OrderByDescending(u => u.Id).ThenBy(u=>u.Age);

3、分组(group by,ToLookUp)

  1. //query语法
  2.  var resGroups = from u in userList group u by u.RoleId;
  3. //lambda方式  注:GroupBy延迟执行,而ToLookup是立即执行的,使用方法和GroupBy一样。
  4. var resGroups2 = userList.GroupBy(u => u.RoleId);
  5. //遍历(group.Key为设置分组的列的值)
  6.              foreach (var group in resGroups)
  7.               {
  8.                   Console.WriteLine("roleId:{0}", group.Key);
  9.                  foreach (UserInfo user in group)
  10.                  {
  11.                     Console.WriteLine("UserName:{0}", user.UserName);
  12.                  }
  13.              }
  14.              /*结果:  roleId:1
  15.                      UserName:zs
  16.                      UserName:ww
  17.                      roleId:2
  18.                      UserName:ls
  19.            UserName:zl 21  UserName:tq */
  20.     
  21. //多列分组
  22.     var productGroup=
  23.         from p in db.Products
  24.         group p by new
  25.         {
  26.             p.PName,
  27.             p.PColor
  28.         }
  29.         into g
  30.         select new
  31.         {
  32.            g.Key,//这里的key是一个对象,有两个属性:PName,PColor
  33.            g
  34.         };

4、连接查询(join)

  1. //query语法,查询用户名和该用户所属的角色 inner join
  2. var resJoin = from user in userList
  3.               join role in roleList
  4.               on user.RoleId equals role.Rid
  5.               select new
  6.               {
  7.                    uname=user.UserName,
  8.                    rname=role.RoleName
  9.                };
  10. //left join,right join调整下顺序即可
  11. var resJoin = from user in userList
  12.               join role in roleList
  13.               on user.RoleId equals role.Rid into temp
  14.           from tt in temp.DefaultIfEmpty
  15.               select new
  16.               {
  17.                     uname=user.UserName,
  18.                     rname=role?.RoleName
  19.               };
  20. //cross join
  21. var resJoin = from user in userList
  22.               from role in roleList
  23.               select new
  24.               {
  25.                    uname=user?.UserName,
  26.                    rname=role?.RoleName
  27.               };
  28. //lambda方式
  29. var resJoin2 = userList.Join(roleList,
  30.                user => user.RoleId,  //outkey
  31.                role => role.Rid,     //innerkey
  32.                (user, role) => new   //result
  33.                {
  34.                  uname = user.UserName,
  35.                  rname = role.RoleName
  36.                });
  37. //遍历
  38. foreach (var item in resJoin2)
  39. {
  40.       Console.WriteLine("用户:{0}----角色:{1}", item.uname, item.rname);
  41. }
  42.   /*结果:  用户:zs----角色:管理员
  43.           用户:ls----角色:普通用户
  44.           用户:ww----角色:管理员
  45.           用户:zl----角色:普通用户
  46.           用户:tq----角色:普通用户 */

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/443080
推荐阅读
相关标签
  

闽ICP备14008679号