C# 基础语法 学习笔记

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/819593.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在EC2上面安装Skywalking9.7.0

问题 前几天在k8s集群安装了skywalking&#xff0c;说什么这种方式不行&#xff0c;客户要求单独在一台linux机器安装skywalking。现在我们来解决这个问题。 步骤 # 移动到/opt目录 cd /opt # 下载apm安装包 sudo wget https://dlcdn.apache.org/skywalking/9.7.0/apache-sk…

超越GPT-4V!马斯克发布Grok-1.5 With Vision

在 Grok-1 开源后不到一个月&#xff0c;xAI 的首个多模态模型就问世了。Grok-1.5V是XAI的第一代多模态模型&#xff0c;除了其强大的文本处理能力之外&#xff0c;Grok现在还能够处理包括文档、图表、图形、屏幕截图和照片在内的各种视觉信息。相信Grok-1.5V将很快提供给现有的…

ViT——nlp和cv进行了统一,使多模态成为可能

题目:AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE 1.概述之前的transformer在cv中应用,大部分是将CNN模型中部分替换成transformer block(整体网络结构不变)或者用transformer将不同网络连接起来,而本文提出:一个针对图像patch的纯的t…

WebShell简介

WebShell简介 1、WebShell分类 • JSP类型 • ASP类型 • PHP类型 2、WebShell用途 • 站长工具 • 持续远程控制 • 权限提升 • 极强隐蔽性 3、WebShell检测方法 • 基于流量的 WebShell 检测 • 基于文件的 WebShell 检测 • 基于日志的 WebShell 检测 WebShe…

看到这12这个登录页,我感觉自己的很多登录白设计啦。

登录页是B端系统的脸面&#xff0c;它是B端系统的入口&#xff0c;是用户与系统之间的第一道门槛。登录页的设计直接影响用户对系统的第一印象&#xff0c;因此登录页的设计应该简洁、清晰、易于使用&#xff0c;并且能够符合用户的需求和期望。

深度学习框架

深度学习框架 1 引言 在当今技术加速发展的时代&#xff0c;深度学习已经成为了人工智能领域内最为引人注目的子领域之一。其在图像识别、自然语言处理、自动驾驶等多个行业中的成功应用&#xff0c;已经证明了深度学习在解决复杂问题方面的巨大潜力。然而&#xff0c;深度学习…

航芯通用MCU技术常见问题 | F4专题

日常工作中&#xff0c;我们的销售或技术工程师经常会收到来自用户的问题&#xff0c;其中一些问题是比较常见的&#xff0c;所以为满足日常用户对航芯产品使用及服务的了解&#xff0c;航芯特此推出“通用MCU技术常见问题”专题&#xff0c;分为F0专题及F4专题&#xff0c;欢迎…

32单片机入门持续更新中

配套资料为野火霸道V2 初识 STM32 4.1 什么是 STM32 STM32&#xff0c;从字面上来理解&#xff0c;ST 是意法半导体&#xff0c;M 是 Microelectronics 的缩写&#xff0c;32 表示 32 位&#xff0c;合起 来理解&#xff0c;STM32 就是指 ST 公司开发的 32 位微控制器。在如今…

如何在Vue3中使用H.265视频EasyPlayer.js流媒体播放器?

H5无插件流媒体播放器EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器&#xff0c;可支持多种流媒体协议播放&#xff0c;可支持H.264与H.265编码格式&#xff0c;性能稳定、播放流畅&#xff0c;能支持WebSocket-FLV、HTTP-FLV&#xff0c;HLS&#xff08;m3u8&#…

【开源鸿蒙】调试OpenHarmony轻量系统QEMU RISC-V版本

【开源鸿蒙】调试OpenHarmony轻量系统QEMU RISC-V版本 一、准备工作1.1 编译OpenHarmony源码1.2 确认OHOS_Image已生成1.3 确认OHOS_Image文件是否有调试信息1.4 检查config.gni文件是否有-g编译选项 二、GDB调试2.1 启动QEMU模拟器2.2 启动GDB调试器2.3 连接QEMU模拟器2.4 使用…

性能优化-02

uptime 依次显示当前时间、系统运行时间以及正在登录用户数&#xff0c;最后三个数字依次则是过去1分钟、5 分钟、15 分钟的平均负载(Load Average) 平均负载是指单位时间内&#xff0c;系统处于可运行状态和不可中断状态的平均进程数&#xff0c;也就是平均活跃进程数&#xf…

Vue3(四):Pinia

一、Pinia介绍 Pinia是一个专门为Vue.js设计的状态管理库&#xff0c;它提供了一种简单和直观的方式来管理应用程序的状态。在使用Pinia时&#xff0c;可以轻松地创建定义状态的存储&#xff0c;然后将其与Vue组件绑定&#xff0c;使它们能够使用该状态。和上一个博客提到的Vu…

【小程序】生成短信中可点击的链接

文章目录 前言一、如何生成链接二、仔细拜读小程序开发文档文档说明1文档说明2 总结 前言 由于线上运营需求&#xff0c;需要给用户发送炮轰短信&#xff0c;用户通过短信点击链接直接跳转进入小程序 一、如何生成链接 先是找了一些三方的&#xff0c;生成的倒是快速&#xf…

TVS参数、选型、对比

https://www.kdocs.cn/l/cpz6hHr7GRlh VRWM &#xff08;Reverse working voltage&#xff09; TVS 的最高工作电压&#xff0c;可连续施加不引起 TVS 劣化或损坏的最高工作峰值电压或直流峰值电压。 对于交流电压&#xff0c;用最高工作电压有效值表示&#xff0c;在VRWM 下&a…

科技助力上亿用户隐私安全保护,合合信息两款产品再获CCIA PIA星级标识

随着互联网技术的飞速发展&#xff0c;个人信息的收集、存储、使用和传输变得日益频繁&#xff0c;其泄露和滥用的风险也随之增加&#xff0c;个人信息保护已成为社会共同关注的热点议题。近期&#xff0c;“中国网络安全产业联盟&#xff08;CCIA&#xff09;数据安全工作委员…

【Windows】SecureCRT v9.2.3永久使用教程亲测可用

​ 软件介绍 SecureCRT 是一款常用的 SSH&#xff08;安全外壳协议&#xff09;和 Telnet 客户端软件&#xff0c;主要用于远程服务器管理和网络设备配置。它具有以下主要功能&#xff1a; 1.安全连接&#xff1a;SecureCRT 提供了强大的加密算法&#xff0c;保障用户与服务…

建立时间/保持时间为负是什么情况

目录 建立时间为负保持时间为负参考 在说明建立时间和保持时间为何为负的情况下&#xff0c;首先可以看看建立时间Tsu和保持时间Th的由来&#xff0c;可参考如下两篇文章&#xff1a; 建立时间和保持时间理解_为什么要满足建立时间和保持时间-CSDN博客 ic基础|时序篇&#xff…

GPT的使用

个人笔记&#xff08;整理不易&#xff0c;有帮助点个赞&#xff09; 笔记目录&#xff1a;学习笔记目录_pytest和unittest、airtest_weixin_42717928的博客-CSDN博客 个人随笔&#xff1a;工作总结随笔_8、以前工作中都接触过哪些类型的测试文档-CSDN博客 网站sms-activate.or…

Linux知识点(3)

文章目录 11. 进程间通信11.1 管道11.1.0 |11.1.1 匿名管道11.1.2 命名管道11.1.3 用匿名管道形成进程池 11.2 system V共享内存11.2.1 system V函数11.2.2 system 命令 11.3 system V消息队列11.4 system V 信号量 12. 进程信号12.1 前台进程和后台进程12.1.1 jobs12.1.2 fg &…

哈尔滨等保测评之什么是linux及快捷方式,看完这篇你还有什么不懂得嘛?

Linux 的学习对于一个程序员的重要性是不言而喻的。前端开发相比后端开发&#xff0c;接触 Linux 机会相对较少&#xff0c;因此往往容易忽视它。但是学好它却是程序员必备修养之一。 什么是Linux Linux 系统内核与 Linux 发行套件的区别 Linux 系统内核指的是由 Linus Torva…