当前位置: 首页 > news >正文

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、隐式类型&#xff08;var&#xff09;6、扩展方法【更换测试实例】7、匿名类型&#xff08;Anonymous type&#xff09;【待补充】8、匿名方法&#xf…...

高完整性系统工程(一): 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模型界面可以分为以下几个步骤&#xff1a; 步骤1&#xff1a;数据准备 首先要准备一组图片数据集&#xff0c;建议使用ImageNet数据集&#xff0c;该数据集包含超过1000个类别和100万张图像。您可以将ImageNet数据集转换为Keras的格式。如果您没有Imag…...

互联网摸鱼日报(2023-03-12)

互联网摸鱼日报&#xff08;2023-03-12&#xff09; InfoQ 热门话题 又拍云邵海杨&#xff1a;25年Linux老兵聊DevOps八荣八耻 快猫来炜&#xff1a;如何端好运维的饭碗 作业帮聂安&#xff1a;运维如何转型&#xff0c;听听作业帮的OPaS思路 CTO药方&#xff1a;如何搭建运…...

SpringBoot异常处理?用这两个就够啦!

​ 在日常项目中&#xff0c;我们难免会遇到系统错误的情况。如果对系统异常的情况不做处理&#xff0c;Springboot本身会默认将错误异常作为接口的请求返回。 GetMapping("/testNorError") public void testNorError() {try {throw new MyException(6000, "我…...

mysql-查询重复数据的条数-count

查询重复数据的条数 select name , count(*) from table group by name&#xff1b; 查询结果&#xff1a;查询表table中name相同重复的个数 补充&#xff1a;count的用法 查询一个表中总共多少行&#xff08;多少条数据&#xff09; select count (*) from table 小结 …...

【Java枚举类】使用enum关键词定义枚举类

使用说明 1.使用 enum 定义的枚举类默认继承了 java.lang.Enum类&#xff0c;因此不能再继承其他类 2.枚举类的构造器只能使用 private 权限修饰符 3.枚举类的所有实例必须在枚举类中显式列出(, 分隔 ; 结尾)。列出的 实例系统会自动添加 public static final 修饰 4.必须在…...

第十四届蓝桥杯三月真题刷题训练——第 8 天

目录 第 1 题&#xff1a;分数 题目描述 运行限制 代码&#xff1a; 第 2 题&#xff1a;回文日期 题目描述 输入描述 输出描述 输入输出样例 运行限制 代码&#xff1a; 第 3 题&#xff1a;迷宫 代码&#xff1a; 第 1 题&#xff1a;分数 题目描述 本题为填空题…...

鼎阳SDS2074X Plus免费“升级”(破解)备忘录

鼎阳SDS2074X Plus从基础参数来看&#xff0c;在一众国产示波器里并不出彩。但作为一款可以免费“升级”到【1】4通道2GSa/s的采样率&#xff0c;500MHz分析带宽&#xff0c;200Mpts存储深度的数字示波器&#xff08;可惜原配的是200MHz的探头&#xff0c;500MHz的探头还是贵&a…...

【C++】C++标准模板库STL (一) string类的使用详解

前言 在前一章种我们介绍了C中的模板的使用&#xff0c;这是一种泛型编程&#xff0c;模板的使用能让我们减少大量的相似代码&#xff0c;减少我们的代码量与工作量&#xff0c;写出更加高效简洁的代码&#xff0c;模板如此好用&#xff0c;但还是要我们先出写一个泛型类或函数…...

如何用SpringBoot+Thymeleaf+Echart生成好看的柱状图,折线图,饼状图

一、前言 上篇文章我们用POI技术读取Excel并生成了相应的图表。但是实际的效果比较一般&#xff0c;因为本身WPS生成图表就比较简单&#xff0c;如果用程序操作远比人工耗时费力&#xff0c;效果远不如一些付费模板。如下图所示&#xff1a; 然后我就想到前端不是有一个简单易…...

LeetCode819. 最常见的单词(python)

题目 给定一个段落 (paragraph) 和一个禁用单词列表 (banned)。返回出现次数最多&#xff0c;同时不在禁用列表中的单词。 题目保证至少有一个词不在禁用列表中&#xff0c;而且答案唯一。 禁用列表中的单词用小写字母表示&#xff0c;不含标点符号。段落中的单词不区分大小写。…...

【深入理解C指针】经典笔试题——指针和数组

&#x1f539;内容专栏&#xff1a;【C语言】进阶部分 &#x1f539;本文概括&#xff1a;一些指针和数组笔试题的解析 。 &#x1f539;本文作者&#xff1a;花香碟自来_ &#x1f539;发布时间&#xff1a;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小时来看小说&#xff0c;是一件很奢侈的事情。但是再荒诞的事情终归有它背后的逻辑链条。这正如Ellery所坚持的那样&#xff0c;逻辑为王。希腊棺材之谜是Ellery Queen首次展露头角&#xff0c; 因此作者特地给他安排了3次伪解答和1次真解答…...

CentOS的下载和安装

文章目录前言一、CentOS的下载二、如何下载1.选择下载版本2.选择isos3.点击isos后&#xff0c;进入如下页面&#xff0c;接着点击X86_644.一般选择下面框住的进行下载三、安装软件选择设置接着进行分区设置设置网络和主机名前言 在学习Linux时&#xff0c;记录下CentOS的安装 …...

new bing的chatGPT如何解析英文论文pdf

昨天我的new bing申请下来了&#xff0c;有了聊天的界面&#xff1a; 但是解析pdf的英文文献&#xff0c;还是不行&#xff0c;没有对话窗口。就问了一下chatGPT&#xff0c;方案如下&#xff1a; 要使用New Bing解析PDF文献&#xff0c;你需要以下几个步骤&#xff1a; 1&a…...

学会这12个Python装饰器,让你的代码更上一层楼

学会这12个Python装饰器&#xff0c;让你的代码更上一层楼 Python 装饰器是个强大的工具&#xff0c;可帮你生成整洁、可重用和可维护的代码。某种意义上说&#xff0c;会不会用装饰器是区分新手和老鸟的重要标志。如果你不熟悉装饰器&#xff0c;你可以将它们视为将函数作为输…...

企业使用ERP的好处

ERP系统是企业管理信息系统的简称&#xff0c;它是以信息技术为手段&#xff0c;以物流、资金流、信息流为主线&#xff0c;以企业的核心业务流程为对象&#xff0c;建立的一套适用于企业管理的、高效的企业管理信息系统。它是通过科学方法和计算机信息技术&#xff0c;将企业运…...

【QT】如何获取屏幕(桌面)的大小或分辨率

目录1. QDesktopWidget 获取系统屏幕大小2. QScreen 获取系统屏幕大小3. geometry() 与 availableGeometry() 的区别1. QDesktopWidget 获取系统屏幕大小 QDesktopWidget 提供了详细的位置信息&#xff0c;其能够自动返回窗口在用户窗口的位置和应用程序窗口的位置 QDesktopW…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...