找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2354|回复: 12

C#--语法之糖有点甜,语法之美很迷人

 火.. [复制链接]
  • 打卡等级:即来则安
  • 打卡总天数:28
  • 打卡月天数:7
  • 打卡总奖励:7961
  • 最近打卡:2025-12-22 17:16:30

3317

主题

285

回帖

2万

积分

管理员

积分
24106
发表于 2021-1-12 21:14:28 | 显示全部楼层 |阅读模式
语法糖的出现绝对是广大码农的福音,为什么叫语法糖?简而言之就是你之前需要写10行代码,现在一行代码就可以搞定并且效率还不下降,你说甜不甜,鸡腿香不香?语法糖能够增加程序的可读性,从而减少程序代码出错的机会。下面介绍一下C#新增或者常用的语法糖。


快速自动属性
自动属性
以前:手写私有变量+公有属性
现在:声明空属性,编译器自动生成对应私有成员字段。写法:输入prop ,连续按两次tab键,自动生成属性。
NULL检查运算符(?.)
“?. ”运算符,可帮助编写更少的代码来处理 null 检查,如果对象为NULL,则不进行后面的获取成员的运算,直接返回NULL。这样可以避免很多程序的异常终止。
string str1 = "abcd";string str2 = null;Console.WriteLine(str1?.Length);// 输出 4Console.WriteLine(str2?.Length);// 输出空三目运算符和空接合运算符int a= 2;//如果 a大于等于0result等于1,否则result等于0.int result = a >= 0 ? 1 : 0;//空接合string sex = null;string s = sex ?? "未知";//左边的变量如果为null则值为右边的变量,否则就是左边的变量值匿名类型(var)
var定义变量有以下四个特点:
1、必须在定义时初始化
2、一旦初始化完成,就不能再给变量赋与初始值不同类型的值了
3、var要求是局部变量
4、使用var定义变量和object不同,它在效率上和使用强类型方式定义变量完全一样
匿名类型的限制:
1、匿名类型不支持事件、自定义方法和自定义重写
2、匿名类型是隐式封闭的
3、匿名类型的实例创建只使用默认构造函数
4、匿名类型没有提供可供控制的类名称(使用var定义的)
var a = 1 ; a = "i liove u"//错误var p = new new { birthday="2019-11-08", name = "jack", aget=10 };foreach与List迭代器
foreach 语句为数组或对象集合中的每个元素重复一个嵌入语句组。
//常规写法foreach (string itemin list){         Console.WriteLine(item);}//List迭代器list.ForEach(a => Console.WriteLine(a));初始化List集合的值// 简化之前List listString = new List();listString.Add("小王");listString.Add("小贤");// 简化后List listString = new List() {Dictionary初始化赋值的新语法Dictionary dic_student = new Dictionary() { {"xiaohua","男"},{"xiaohong","女"}};对象初始化器//原始写法People xiaoming = new People();xiaoming.name = "xiaoming";xiaoming.age = 10 ;xiaoming.sex = 男"";//语法糖写法People xiaoming = new People(){name = "xiaoming",age = 10 ,sex = "男"};using自动资源释放
为了节约资源,每次使用完毕后都要释放掉资源,其中可以使用Using和try finally来进行释放资源操作。需要注意的是使用Using释放资源的对象都必须继承IDisposable接口。
// try finally 写法SqlConnection conn = null;try{        conn = new SqlConnection("连接数据库");        conn.Open();}finally{        conn.Close();        conn.Dispose();}// Using语法糖写法using (SqlConnection conn=new SqlConnection("连接数据库")){ conn.Open();}字符串嵌入$
字符串构造我们一般用Format函数,但是现在加入了“$”更加简单方便
// 之前var str=string.Format("时间:{0}", DateTime.Now);// 改进var str=$"时间:{DateTime.Now}";元组
元组(Tuple)使方法 可以返回多个返回值 而不需要借助 out ref 关键字。
public static Tuple ReturnOldTuple(){ int id = 6; string name = "王"; int num = 50;//创建返回对象 Tuple return Tuple.Create(id, name, num); }局部函数
局部函数的主要功能与匿名方法非常相似:在某些情况下,创建一个命名函数在读者的认知负担方面代价太大。有时,函数本身就是另一个函数的部分逻辑,因此用一个单独的命名实体来污染“外部”范围是毫无意义的。您可能认为此功能是多余的,因为匿名委托或Lambda表达式可以实现相同的行为。但事实并非如此,匿名函数有一定的限制,其特征可能不适合您的场景。
static void Main(string[] args) { int Result = Add(5, 7) + subtract(6,2); Console.WriteLine("结果:"+Result); Console.ReadKey(); //加 int Add(int a,int b) { return a + b; } int x = 1; int y = -1 ; int result = Add(x,y); } 匿名委托与lambda//以前写法class TestClass{        //定义委托        public delegate void Delegate_Test(string str);        //定义委托方法        public void Method(string str)        {                Console.WriteLine(str);        }        public void Use(Delegate_Test d, string str)        {                d(str);        }}TestClass test = new TestClass();test.UseDelegate(new TestClass.Delegate_Test(mc.Method), "Hello!");//新写法*********//不需要定义委托//使用匿名委托test.Use(delegate(string str){        Console.WriteLine(str);}, "Hello!"); //使用Lambda表达式test.Use(s =>{        Console.WriteLine(s);}, "Hello!");Lambda表达式
lambda表达式这个应该很多人都知道,就是俗称的箭头函数;lambda在高级写法中是用的十分多的。
举一个最简单的例子,假设有一个List,里面存的是人员信息,现在我需要按人员年龄排序,用lambda就十分快捷;
List list = new List(); list.Sort((x, y) => { return x.age.CompareTo(y.age);});
Lambda最基本的语法:{参数列表}=>{方法体},但是lambda有很多变体,在不同的情况下可以省去不同的内容:
如果参数列表只包含一个推断类型参数时:
参数列表=>{方法体}
前提:x的数据类型可以根据上下文推断出来
x =>{returm x+1}
如果方法体只包含一条语句时:
{参数列表}=>表达式
{int x} => x+1;

工控课堂 www.gkket.com

0

主题

292

回帖

2262

积分

高级会员

积分
2262
发表于 2021-1-12 21:14:28 | 显示全部楼层
无私奉献,好工控人,32个赞送给你!!
工控课堂 www.gkket.com

0

主题

120

回帖

411

积分

注册会员

积分
411
发表于 2021-1-12 21:16:49 | 显示全部楼层
强烈支持楼主ing……
工控课堂 www.gkket.com

0

主题

167

回帖

347

积分

注册会员

积分
347
发表于 2025-11-17 03:40:19 | 显示全部楼层
不请自来,只为说一句:太精彩了!
工控课堂 www.gkket.com

0

主题

71

回帖

112

积分

新手上路

积分
112
发表于 2025-11-17 03:58:42 | 显示全部楼层
这评论区卧虎藏龙,个个都是人才!
工控课堂 www.gkket.com

0

主题

86

回帖

291

积分

注册会员

积分
291
发表于 2025-11-17 07:29:55 | 显示全部楼层
蹲一波同款,有没有姐妹 / 兄弟推荐?
工控课堂 www.gkket.com

1

主题

115

回帖

181

积分

新手上路

积分
181
发表于 2025-11-17 15:54:11 | 显示全部楼层
占个楼慢慢看,先马克一下
楼主辛苦啦,期待下一篇分享
工控课堂 www.gkket.com

0

主题

1672

回帖

4321

积分

金牌会员

积分
4321
发表于 2025-11-26 03:37:23 | 显示全部楼层
理性围观,感觉大家说得都有道理
工控课堂 www.gkket.com

0

主题

73

回帖

89

积分

新手上路

积分
89
发表于 2025-11-26 03:46:58 | 显示全部楼层
楼主辛苦啦,期待下一篇分享!
工控课堂 www.gkket.com

0

主题

110

回帖

362

积分

注册会员

积分
362
发表于 2025-11-26 03:47:41 | 显示全部楼层
楼主辛苦啦,期待下一篇分享
工控课堂 www.gkket.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|手机版|免责声明|本站介绍|工控课堂 ( 沪ICP备20008691号-1 )

GMT+8, 2025-12-23 02:23 , Processed in 0.164256 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表