C#【汇总篇】语法糖汇总
文章目录
- 0、语法糖简介
- 1、自动属性
- 2、参数默认值和命名参数
- 3、类型实例化
- 4、集合
- 4.1 初始化List集合的值
- 4.2 取List中的值
- 5、隐式类型(var)
- 6、扩展方法【更换测试实例】
- 7、匿名类型(Anonymous type)【待补充】
- 8、匿名方法(Anonymous methods)【待补充】
- 9、dynamic动态对象
- 10、字符串嵌入值
- 11、问号(?)表达式
- 11.1 可空类型修饰符(?)
- 11.2 三元(运算符)表达式(?: )
- 11.3 合并运算符(??) 【和 ??=】
- 11.4 NULL检查运算符(?.)
- 11.5 (?[])运算符【待补充】
- 12、使用完毕后自动释放资源(using || try finally)
- 13、委托
- 13.1 基本用法
- 13.2内置委托【重要】
- 14、Lambda表达式【待补充】
- 15、Linq【待补充】
0、语法糖简介
语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。
它可以使程序员更加容易去使用这门语言:操作可以变得更加清晰、方便,或者更加符合程序员的编程习惯。
简而言之,语法糖就是一种便捷写法。
1、自动属性
未简化:手写私有变量+公有属性
private string _name;
public string Name
{get { return _name; }set { _name = value; }
}
简化:声明空属性,编译器自动生成对应私有成员字段。
public string Name { get; set; }
2、参数默认值和命名参数
使用的指导原则:
1、可以为方法和有参属性指定默认值
2、有默认值的参数,必须定义在没有默认值的参数之后
3、默认参数必须是常量
4、ref和out参数不能指定默认值
public class User
{public string Name { get; set; }public int Age { get; set; }// 自动属性默认初始化public string Address { get; set; } = "江苏";// 设置参数默认值(age)public User(string name, string address, int age = 18){this.Name = name;this.Age = age;this.Address = address;}
}// 命名参数(指定address参数)
User user = new User("小王",address:"苏州");
3、类型实例化
// 使用对象初始化器:{},使用对象初始化器,必须提供一个无参的构造函数,可以只给部分属性初始化
User user = new User()
{Name = "小王",Age = 18,Address = "苏州",};
4、集合
4.1 初始化List集合的值
// 简化之前
List<string> listString = new List<string>();
listString.Add("小王");
listString.Add("小贤");// 简化后
List<string> listString = new List<string>() {"小王","小贤",
};
4.2 取List中的值
// 简化之前
foreach (string str in listString)
{Console.WriteLine(str);
}
// 简化之后
listString.ForEach(s => Console.WriteLine(s));
5、隐式类型(var)
程序员在声明变量时可以不指定类型,由编译器根据值来指定类型
var定义变量有以下四个特点:
1、必须在定义时初始化
2、一旦初始化完成,就不能再给变量赋与初始值不同类型的值了
3、var要求是局部变量
4、使用var定义变量和object不同,它在效率上和使用强类型方式定义变量完全一样
// 1.隐式类型在定义时必须初始化
//var name; 报错
var name = "小王";
// 2.可以用同类型的其他隐式类型变量来初始化新的隐式类型变量
var age = 18;
var ageTwo = age;
// 3.也可以用同类型的字面量来初始化隐式类型变量
var name1 = "小王";
name1 = "小贤";
// 4.隐式类型局部变量还可以初始化数组而不指定类型
var array = new List<string>() { "小王", "小贤", };
6、扩展方法【更换测试实例】
扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。
注意:定义扩展方法的类必须和使用地方的类命名空间相同(如果不同命名空间记得先引入命名空间,下边示例在一个命名空间中)
using System;namespace ConsoleApp1
{public static class ExtensionString{//向 String 类扩展一个统计单词数量的方法public static int CountWord(this string str){return str.Split(' ').Length;}// 为string 添加一个扩展方法(判断string是否为空||null)public static bool IsEmpty(this string str){return string.IsNullOrEmpty(str);}}public class Program{static void Main(string[] args){Console.WriteLine("单词数量:" + "Hello World".CountWord()); //没有参数Console.WriteLine("是否为空/null:" + "Hello World".IsEmpty()); //没有参数Console.ReadLine();}}
}

7、匿名类型(Anonymous type)【待补充】
8、匿名方法(Anonymous methods)【待补充】
9、dynamic动态对象
.net4.0中引入了一个新类型 dynamic.该类型是一种静态类型,但类型为 dynamic 的对象会跳过静态类型检查。大多数情况下,该对象就像具有类型 object 一样.在编译时,将假定类型化为 dynamic 的元素支持任何操作。
dynamic dy = "string";
Console.WriteLine(dy.GetType());
//输出:System.String
dy = 100;
Console.WriteLine(dy.GetType());
//输出:System.Int32
10、字符串嵌入值
c#6.0后新增的特性 $,用于代替string.Format(“”)
// 之前
var str = string.Format("时间:{0}", DateTime.Now);
Console.WriteLine(str);
// 改进
var str1 = $"时间:{DateTime.Now}";
Console.WriteLine(str1);
11、问号(?)表达式
11.1 可空类型修饰符(?)
引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空。
string str = null;// 正确
//int i = null; // 错误
为了使值类型也可为空,就可以使用可空类型,可以使用 Nullable泛型结构来定义,但是微软为了语法更简洁,提供了?运算符来定义可空类型,二者效果是一样的,基本语法如下:
值类型? 变量名=值;
// 这二种定义可空类型的方法都是对的,但是?更简洁
Nullable<int> intOne = 5;
int? intTwo = 5;
11.2 三元(运算符)表达式(?: )
int gender = 1;
string str = gender == 1 ? "男" : "女";
11.3 合并运算符(??) 【和 ??=】
合并运算符使用??表示,当进行转换时,如果可空类型的值为 null,则使用默认值。
int? intA = null;
int intB = 100;
intB = intA ?? 0;//此处intA为null,则将0赋值给intBint? intC = 500;
intB = intC ?? 0;//此处intC不为null,则将500赋值给intB
11.4 NULL检查运算符(?.)
C# 6.0中,引入了 ?. 的运算符,可帮助编写更少的代码来处理 null 检查
如果对象为NULL,则不进行后面的获取成员的运算,直接返回NULL
string str = "abcd";
string s1 = null;
Console.WriteLine(str?.Length);// 输出 4
Console.WriteLine(s1?.Length);// 输出空
11.5 (?[])运算符【待补充】
12、使用完毕后自动释放资源(using || try finally)
为了节约资源,每次使用完毕后都要释放掉资源,其中可以使用using和try finally来进行释放资源操作。需要注意的是使用using释放资源的对象都必须继承IDisposable接口(MSDN)。
// try finally 写法
SqlConnection conn = null;
try
{conn = new SqlConnection("数据库连接字符串");conn.Open();
}
finally
{conn.Close();conn.Dispose();
}// Using写法
using (SqlConnection conn=new SqlConnection("数据库连接字符串"))
{conn.Open();
}
13、委托
13.1 基本用法
在.net 1.1时我们不得不声明方法后才在委托中使用。
在.net 2.0之后我们可以使用匿名委托,他不单可以简化写法,还可以在匿名委托中访问范围内的变量;
再后来Lambda表达式来了,写法就更简便了。
class MyClass
{//定义委托public delegate void TestDelegate(string str);//定义委托方法public void Method(string str){Console.WriteLine(str);}public void UseDelegate(TestDelegate d, string str){d(str);}
}//调用委托
MyClass mc = new MyClass();
//调用定义的委托方法
mc.UseDelegate(new MyClass.TestDelegate(mc.Method), "Hello!");//使用匿名委托
mc.UseDelegate(delegate(string str)
{Console.WriteLine(str);
}, "Hello!");//使用Lambda表达式
mc.UseDelegate(s =>
{Console.WriteLine(s);
}, "Hello!");
13.2内置委托【重要】
CLR环境中给我们内置了几个常用委托Action、 Action<T>、Func<T>、Predicate<T>,一般我们要用到委托的时候,尽量不要自己再定义一 个委托了,就用系统内置的这几个已经能够满足大部分的需求,且让代码符合规范。
查看该博客了解更多:C#委托Action、 Action<T>、Func<T>、Predicate<T>
14、Lambda表达式【待补充】
15、Linq【待补充】
参考:https://blog.csdn.net/boyyus/article/details/100638651
相关文章:
C#【汇总篇】语法糖汇总
文章目录0、语法糖简介1、自动属性2、参数默认值和命名参数3、类型实例化4、集合4.1 初始化List集合的值4.2 取List中的值5、隐式类型(var)6、扩展方法【更换测试实例】7、匿名类型(Anonymous type)【待补充】8、匿名方法…...
高完整性系统工程(一): Safety Engineering, HAZOP Fault Tree Analysis
目录 1. 因果性不等同于相关性 2. HAZOP 2.1 学习HAZOP 2.2 HAZOP概览 2.3 Assessing Hazard Risks 评估 2.4 示例场景 2.5 HAZOP Guidewords 2.6 HAZOP Process 2.7 HAZOP Outcomes 2.8 HAZOP Summary 3. FAULT TREE ANALYSIS 3.1 Analysis Outcomes 1. 因果性不等…...
VGG16分类模型的网页界面(Flask,keras)
开发一个网页版的VGG16模型界面可以分为以下几个步骤: 步骤1:数据准备 首先要准备一组图片数据集,建议使用ImageNet数据集,该数据集包含超过1000个类别和100万张图像。您可以将ImageNet数据集转换为Keras的格式。如果您没有Imag…...
互联网摸鱼日报(2023-03-12)
互联网摸鱼日报(2023-03-12) InfoQ 热门话题 又拍云邵海杨:25年Linux老兵聊DevOps八荣八耻 快猫来炜:如何端好运维的饭碗 作业帮聂安:运维如何转型,听听作业帮的OPaS思路 CTO药方:如何搭建运…...
SpringBoot异常处理?用这两个就够啦!
在日常项目中,我们难免会遇到系统错误的情况。如果对系统异常的情况不做处理,Springboot本身会默认将错误异常作为接口的请求返回。 GetMapping("/testNorError") public void testNorError() {try {throw new MyException(6000, "我…...
mysql-查询重复数据的条数-count
查询重复数据的条数 select name , count(*) from table group by name; 查询结果:查询表table中name相同重复的个数 补充:count的用法 查询一个表中总共多少行(多少条数据) select count (*) from table 小结 …...
【Java枚举类】使用enum关键词定义枚举类
使用说明 1.使用 enum 定义的枚举类默认继承了 java.lang.Enum类,因此不能再继承其他类 2.枚举类的构造器只能使用 private 权限修饰符 3.枚举类的所有实例必须在枚举类中显式列出(, 分隔 ; 结尾)。列出的 实例系统会自动添加 public static final 修饰 4.必须在…...
第十四届蓝桥杯三月真题刷题训练——第 8 天
目录 第 1 题:分数 题目描述 运行限制 代码: 第 2 题:回文日期 题目描述 输入描述 输出描述 输入输出样例 运行限制 代码: 第 3 题:迷宫 代码: 第 1 题:分数 题目描述 本题为填空题…...
鼎阳SDS2074X Plus免费“升级”(破解)备忘录
鼎阳SDS2074X Plus从基础参数来看,在一众国产示波器里并不出彩。但作为一款可以免费“升级”到【1】4通道2GSa/s的采样率,500MHz分析带宽,200Mpts存储深度的数字示波器(可惜原配的是200MHz的探头,500MHz的探头还是贵&a…...
【C++】C++标准模板库STL (一) string类的使用详解
前言 在前一章种我们介绍了C中的模板的使用,这是一种泛型编程,模板的使用能让我们减少大量的相似代码,减少我们的代码量与工作量,写出更加高效简洁的代码,模板如此好用,但还是要我们先出写一个泛型类或函数…...
如何用SpringBoot+Thymeleaf+Echart生成好看的柱状图,折线图,饼状图
一、前言 上篇文章我们用POI技术读取Excel并生成了相应的图表。但是实际的效果比较一般,因为本身WPS生成图表就比较简单,如果用程序操作远比人工耗时费力,效果远不如一些付费模板。如下图所示: 然后我就想到前端不是有一个简单易…...
LeetCode819. 最常见的单词(python)
题目 给定一个段落 (paragraph) 和一个禁用单词列表 (banned)。返回出现次数最多,同时不在禁用列表中的单词。 题目保证至少有一个词不在禁用列表中,而且答案唯一。 禁用列表中的单词用小写字母表示,不含标点符号。段落中的单词不区分大小写。…...
【深入理解C指针】经典笔试题——指针和数组
🔹内容专栏:【C语言】进阶部分 🔹本文概括:一些指针和数组笔试题的解析 。 🔹本文作者:花香碟自来_ 🔹发布时间:2023.3.12 目录 一、指针和数组练习题 1. 一维数组 2. 字符数组 …...
雷达散射截面
雷达散射截面(Radar Cross Section, RCS)是表征目标散射强弱的物理量。 σ = 4 π R 2 ∣ E s ∣ 2 ∣ E i ∣ 2 \sigma = 4\pi R^2 \frac{|E_s |^2}{|E_i|^2}...
希腊棺材之谜——复盘
文章目录梗概推导伪解答虽然花费6-8小时来看小说,是一件很奢侈的事情。但是再荒诞的事情终归有它背后的逻辑链条。这正如Ellery所坚持的那样,逻辑为王。希腊棺材之谜是Ellery Queen首次展露头角, 因此作者特地给他安排了3次伪解答和1次真解答…...
CentOS的下载和安装
文章目录前言一、CentOS的下载二、如何下载1.选择下载版本2.选择isos3.点击isos后,进入如下页面,接着点击X86_644.一般选择下面框住的进行下载三、安装软件选择设置接着进行分区设置设置网络和主机名前言 在学习Linux时,记录下CentOS的安装 …...
new bing的chatGPT如何解析英文论文pdf
昨天我的new bing申请下来了,有了聊天的界面: 但是解析pdf的英文文献,还是不行,没有对话窗口。就问了一下chatGPT,方案如下: 要使用New Bing解析PDF文献,你需要以下几个步骤: 1&a…...
学会这12个Python装饰器,让你的代码更上一层楼
学会这12个Python装饰器,让你的代码更上一层楼 Python 装饰器是个强大的工具,可帮你生成整洁、可重用和可维护的代码。某种意义上说,会不会用装饰器是区分新手和老鸟的重要标志。如果你不熟悉装饰器,你可以将它们视为将函数作为输…...
企业使用ERP的好处
ERP系统是企业管理信息系统的简称,它是以信息技术为手段,以物流、资金流、信息流为主线,以企业的核心业务流程为对象,建立的一套适用于企业管理的、高效的企业管理信息系统。它是通过科学方法和计算机信息技术,将企业运…...
【QT】如何获取屏幕(桌面)的大小或分辨率
目录1. QDesktopWidget 获取系统屏幕大小2. QScreen 获取系统屏幕大小3. geometry() 与 availableGeometry() 的区别1. QDesktopWidget 获取系统屏幕大小 QDesktopWidget 提供了详细的位置信息,其能够自动返回窗口在用户窗口的位置和应用程序窗口的位置 QDesktopW…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
