首页 > 编程语言 >C# 基础语法 学习笔记

C# 基础语法 学习笔记

时间:2024-04-11 10:29:43浏览次数:30  
标签:UserName C# Age 笔记 语法 泛型 user var new

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()
    {
        // 创建一个泛型类的实例,指定泛型类型参数为int
        MyGenericClass<int> intClass = new MyGenericClass<int>(10);
        intClass.DisplayValue(); // 输出: 10
 
        // 创建一个泛型类的实例,指定泛型类型参数为string
        MyGenericClass<string> stringClass = new MyGenericClass<string>("Hello World");
        stringClass.DisplayValue(); // 输出: Hello World
 
        Console.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};

//lambda

var 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 join

var 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 join

var 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----角色:普通用户 */

标签:UserName,C#,Age,笔记,语法,泛型,user,var,new
From: https://blog.csdn.net/nmmking/article/details/137547537

相关文章

  • ElasticSearch
    1.ES是什么https://www.elastic.co/cn/https://www.elastic.co/cn/elastic-stack/1.从事运维,开发,大数据的人员需要学习ElasticSearch数据库2.需要配置日志分析架构,配置ELK技术栈lucene搜索引擎库https://lucene.apache.org/core/ApacheLucene™是一个完全用Java......
  • MySQL 06 mysql 如何实现类似 oracle 的 merge into
    拓展阅读MySQLViewMySQLtruncatetable与delete清空表的区别和坑MySQLRulermysql日常开发规范MySQLdatetimetimestamp以及如何自动更新,如何实现范围查询MySQL06mysql如何实现类似oracle的mergeintoMySQL05MySQL入门教程(MySQLtutorialbook)MySQL04-E......
  • localStorage使用总结
    一、什么是localStorage、sessionStorage在HTML5中,新加入了一个localStorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(cookie中每条cookie的存储空间为4k),localStorage中一般浏览器支持的是5M大小,这个在不同的浏览器中localStorage会有所不同......
  • CentOS7 安装 人大金仓 V8R6
    一、安装文件概要文件名:KingbaseES_V008R006C005B0023_Lin64_single_install.iso数据库版本:V008R006C005B0023文件大小:872,781KBMD5:0A135A2451529EF62FD1BE828FEA56D4SHA1:7AB4B1D03D66121C4A7DB736151B9341D807EEB8下载地址:https://kingbase.oss-cn-beijing.aliyuncs.com/......
  • Kibana-4.6.6 marvel插件license过期重新注册
    1、注册新的license,https://register.elastic.co/marvel_register,注册完毕邮箱收取下载地址,将新的license下载到本地2、到license所在目录执行curl命令:curl-XPUT'http://<host>:<port>/_license'[email protected]将host和port替换为Elasticsearch的IP和端口执行curl命令报......
  • docker-compose部署kafka
    docker-compose.ymlversion:'2'services:zookeeper:image:develop-harbor.geostar.com.cn/3rd/zookeeper:3.5.5ports:-"2181:2181"kafka:image:develop-harbor.geostar.com.cn/3rd/wurstmeister/kafka:2.12-2.2.1......
  • 上海泗博推出OPLink软件---助力企业快速搭建OPC与MQTT平台通信
    OPLink是上海泗博自主研发的基于OPC数据采集及转发,OPC数据到MQTT通信的产品。它是基于上海泗博多年的OPC应用经验和工业通信产品的开发背景,推出的OPC/MQTT工业通信软件。这款软件设计简洁、实用、稳定。同时,OPLink还具备与KepwareLinkMaster相似的数据转发功能,可实现PLC设备间的......
  • 超大容量 | 瑞芯微RK3588J工业核心板新增16GB DDR + 128GB eMMC配置!
    作为瑞芯微的金牌合作伙伴,创龙科技在2023年9月即推出搭载瑞芯微旗舰级处理器RK3588J的全国产工业核心板——SOM-TL3588。 SOM-TL3588工业核心板是基于瑞芯微RK3588J/RK3588高性能处理器设计的四核ARMCortex-A76+四核ARMCortex-A55全国产工业核心板,Cortex-A76核心主频高达2.......
  • App Store 警告 ITMS-91053: Missing API declaration
    问题:app虽然成功上架AppStore,但是邮件提示了如下警告:解决:解决方法是添加隐私清单文件。参考官方说明:官方文档其它相关链接:StackOverflow中关于这个问题的讨论这位作者分享了如何解决该问题这篇文章提供了解决该问题详细的指南......
  • React常见的面试题
    1、什么是React?React是一个用于构建用户界面的javascript库。用户界面由按钮、文本和图像等小单元内容构建而成的。2、React的特点是什么?(1)、组件化(2)、虚拟dom(3)、单向数据流(4)、JSX语法(5)、高效性能(6)、生态系统丰富3、什么是JSX?JSX是一种JavaScript的语法扩展,它允许在JavaS......