编程技术是改变世界的力量。
本站
当前位置:网站首页 > 后端语言 > 正文

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

gowuye 2024-05-16 14:33 1 浏览 0 评论

语法糖的出现绝对是广大码农的福音,为什么叫语法糖?简而言之就是你之前需要写10行代码,现在一行代码就可以搞定并且效率还不下降,你说甜不甜,鸡腿香不香?语法糖能够增加程序的可读性,从而减少程序代码出错的机会。下面介绍一下C#新增或者常用的语法糖。

快速自动属性

自动属性

以前:手写私变量+公属性
现在:声明空属性,编译器自动生成对应私成员字段。写法:输入prop ,连续按两次tab键,自动生成属性。

NULL检查运算符(?.)

“?. ”运算符,可帮助编写更少的代码来处理 null 检查,如果对象为NULL,则不进行后面的获取成员的运算,直接返回NULL。这样可以避免很多程序的异常终止。

string str1 = "abcd";
string str2 = null;
Console.WriteLine(str1?.Length);// 输出 4
Console.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;

END

纯手KEY,希望大家多多支持小编,点个关注~~~

相关推荐

R语言数据挖掘实践——支持向量机的常用函数
R语言数据挖掘实践——支持向量机的常用函数

e1071包是R语言中用于支持向量机建模与分析的软件包,其主要用于支持向量机的模型构建,提供核心函数svm()来建立支持向量机的基础模型,并且可辅助使用pred...

2024-05-18 12:15 gowuye

R数据分析:如何做聚类分析,实操解析
R数据分析:如何做聚类分析,实操解析

Clusteringisabroadsetoftechniquesforfindingsubgroupsofobservationswi...

2024-05-18 12:14 gowuye

用R语言做数据分析——马赛克图
用R语言做数据分析——马赛克图

到目前为止,我们已经学习了许多可视化定量或连续型变量间关系的方法。但如果变量是类别型的呢?若只观察单个类别型变量,可以使用柱状图或者饼图;若存在两个类别型变量,...

2024-05-18 12:14 gowuye

用R语言做数据分析——方差分析基本概论
用R语言做数据分析——方差分析基本概论

在实际工作中,影响一件事的因素是很多的,我们总是希望通过各种试验来观察各种因素对试验结果的影响。例如,不同的生产厂家、不同的原材料、不同的操作规程,以及不同的技...

2024-05-18 12:14 gowuye

R语言数据分析实战:数据清洗与可视化
R语言数据分析实战:数据清洗与可视化

《R语言数据分析实战:数据清洗与可视化》是一本深入浅出的实践指南,专为对数据分析感兴趣的读者精心编撰。本书旨在帮助读者掌握R语言这一强大的统计分析工具,通过实例...

2024-05-18 12:13 gowuye

用R语言做数据分析——双因素方差分析
用R语言做数据分析——双因素方差分析

在双因素方差分析中,受试者被分配到两因子的交叉类别组中。以基础安装中的Tooth-Growth数据集为例,随机分配60只豚鼠,分别采用两种喂食方法(橙汁或维生素...

2024-05-18 12:13 gowuye

用R语言做数据分析——独立两样本和K样本检验
用R语言做数据分析——独立两样本和K样本检验

coin包简介对于独立性问题,coin包提供了一个进行置换检验的一般性框架,通过这个包,我们可以回答如下问题:响应值与组的分配独立吗?两个数值变量独立吗?两个类...

2024-05-18 12:13 gowuye

用R语言做数据分析——用回归做方差分析
用R语言做数据分析——用回归做方差分析

之前提到方差分析和回归都是广义线性模型的特例,之前文章的所有设计都可以用lm()函数来分析。为了更好地理解输出结果,需要弄明白在拟合模型时,R语言是如何处理类别...

2024-05-18 12:13 gowuye

数据分析R语言——数据结构
数据分析R语言——数据结构

数据分析R语言——数据结构数组数组(array)与矩阵类似,但是维度可以大于2.数组通过array()函数创建。形式如;myarray<-array(v...

2024-05-18 12:13 gowuye

R语言数据挖掘实践——关联分析的常用函数
R语言数据挖掘实践——关联分析的常用函数

arules和arulesViz是R语言中两个专用于关联分析的软件包。其中arules用于关联规则的数字化生成,提供Apriori和Eclat这两种快速挖掘频繁...

2024-05-18 12:12 gowuye

R语言数据挖掘实践——判别分析的常用函数
R语言数据挖掘实践——判别分析的常用函数

判别算法在R语言中实现主要涉及4个软件包中的相关函数,它们依次为MASS、klaR、class和kknn。其中MASS包含有大量实用而先进的统计计数函数及适用数...

2024-05-18 12:12 gowuye

用R语言读取Excel、PDF和JSON文件,终于有人讲明白了
用R语言读取Excel、PDF和JSON文件,终于有人讲明白了

导读:本文将讨论Excel、PDF等文件的读取,以及相应函数的参数设置。作者:刘健邬书豪如需转载请联系华章科技下图总结了主要程序包,希望读者在日常练习和工作中...

2024-05-18 12:12 gowuye

R语言数据挖掘实践——聚类分析的常用函数
R语言数据挖掘实践——聚类分析的常用函数

使用R语言可以轻松实现聚类分析,stats、cluster、fpc和mclust是常用的四个聚类分析软件包。stats主要包含一些基本的统计函数,如用于统计计算...

2024-05-18 12:12 gowuye

用R语言做数据分析——时间序列分类
用R语言做数据分析——时间序列分类

时间序列分类是根据已标注的时间序列建立一个分类模型,然后使用分类模型预测未标记时间序列的类别。从时间序列中抽取出新特征肯呢个有助于提高分类模型的性能。特征提取技...

2024-05-18 12:11 gowuye

一文看懂用R语言读取Excel、PDF和JSON文件(附代码)
一文看懂用R语言读取Excel、PDF和JSON文件(附代码)

导读:本文将讨论Excel、PDF等文件的读取,以及相应函数的参数设置。作者:刘健邬书豪如需转载请联系华章科技下图总结了主要程序包,希望读者在日常练习和工作中...

2024-05-18 12:11 gowuye

取消回复欢迎 发表评论: