博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈C# 匿名变量
阅读量:6376 次
发布时间:2019-06-23

本文共 3531 字,大约阅读时间需要 11 分钟。

每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!当然,希望将来的一天,某位老板看到此博客,给你的程序员职工加点薪资吧!因为程序员的世界除了苦逼就是沉默。我眼中的程序员大多都不爱说话,默默承受着编程的巨大压力,除了技术上的交流外,他们不愿意也不擅长和别人交流,更不乐意任何人走进他们的内心,他们常常一个人宅在家中!

闲话说多了,咱进入正题:

首先讲解下匿名变量,在讲解匿名变量之前,我先通过代码展示匿名变量的声明,如下:

static void Main()        {            var A = 1;//在此,A会被解析为int类型 和 int A=1;是一模一样滴            var AA = "";//AA会被解析为string类型 和 string AA="";是一模一样滴            var AAA = new[] {
1,2,3,4,5 };//AAA会被解析为int类型数组 和 int[]类型是一模一样滴 var B = new { };//B会被解析为一个空的对象/集合,没有什么属性 和object B=new {};是一模一样滴 var BB = new { userName = "Jack.Chen", Sex = "男", Age = 26, Address = "中国-苏州" };//BB会被解析为一个拥有属性的对象 和preson类型是一模一样滴 var BBB = new[] { new preson { UserName = "Jack.Chen", Sex = "男", Age = 26, Address = "中国-苏州" }, new preson { UserName = "Loose-Li", Sex = "女", Age = 25, Address = "中国-上海" }, new preson { UserName = "cathy", Sex = "女" } };//BBB会被解析为一个preson对象集合 和List
类型是一模一样滴 }
class preson        {            string userName;            public string UserName            {                get { return userName; }                set { userName = value; }            }            string sex;            public string Sex            {                get { return Sex; }                set { Sex = value; }            }            int age;            public int Age            {                get { return Age; }                set { Age = value; }            }            string address;            public string Address            {                get { return Address; }                set { Address = value; }            }        }

上面的每行代码,与每行代码后面的注释,起到的作用是完全一样的

也就是说,在声明一个变量(并且同时给它赋值)的时候,完全不用指定变量的类型,只要一个var就解决问题了

当然,有些人会问:这样定义会降低程序的性能吗?

可以负责任的告诉你,这样写不会影响性能!

上面的代码和注释里的代码,编译后产生的IL代码(中间语言代码)是完全一样的(编译器根据变量的值,推导出变量的类型,才产生的IL代码)

那么使用匿名变量的优点是什么?      

 1)、在编程的过程中,我们常常会遇到这种情况,声明变量或者接收变量的时候,我们预先不知道该变量的类型,通常,我们会把声明的变量定义为:Object类型,毕竟Object类型是所有类型的祖先类型嘛!这样写程序无可厚非,系统编译也能通过,也不会报任何错误!但是在C#语言中,类型的转换往往会涉及到‘装箱拆箱’操作,而,装箱拆箱操作又会额外的增加系统开支,说白了就是使系统性能降低。

匿名变量的横空出世解决了你的这个烦恼。

在我们不知道变量为何种类型时,我们可以把这个变量定义为:Var(也就是匿名变量),这样系统会帮我们解析变量的类型。这样,即解决了我们的烦恼,也不会出现装箱拆箱,增加了系统的性能。

有人说:匿名类型是为懒人专门设计的一个变量类型,你这么说,我认为也是非常对的,毕竟使用匿名变量,我们再也不用考虑变量类型,而把这个艰巨的任务交给编译器。啊哈哈,累死编译器关我毛事!

2)、在foreach一个集合的时候,可以使用var关键字来代替书写循环变量的类型,代码如下:

 

protected void ForEach_Var()        {            List
pres = new List
{ new preson { UserName = "Jack.Chen", Sex = "男", Age = 26, Address = "中国-苏州" }, new preson { UserName = "Loose-Li", Sex = "女", Age = 25, Address = "中国-上海" }, new preson { UserName = "cathy", Sex = "女" } }; foreach (var P in pres) { Console.WriteLine(P.UserName); } }

 

3)、序列化和反序列化为JSON时很有用,代码如下:

protected static void Json_var()        {            var BBB = new[] { new preson { UserName = "Jack.Chen", Sex = "男", Age = 26, Address = "中国-苏州" }, new preson { UserName = "Loose-Li", Sex = "女", Age = 25, Address = "中国-上海" }, new preson { UserName = "cathy", Sex = "女" } };//BBB会被解析为一个preson对象集合 和List
类型是一模一样滴 string Json = JsonConvert.SerializeObject(BBB);//将匿名变量转化为JSON字符串 var DX = JsonConvert.DeserializeObject(Json);//将JSON字符串转为JSON对象 Console.WriteLine(DX); }

输出结果如下:

那么使用Var类型需要注意什么呢?

你不能用var关键字声明一个变量而不给它赋值,因为编译器无法推导出你这个变量是什么类型的。

至此:C#匿名变量的简单介绍就讲解完毕了!相信大家对C#匿名变量有所了解了吧!

当然:有了匿名变量,就会有匿名方法。要想了解匿名方法,就得从C#委托讲起,至于C#委托和匿名方法我会在下一篇博客进行完成!敬请大家期待!在此,就不作讲解了,急需了解的小虎斑们可以查看我的博客:有深到浅讲解C#LINQ,网址为:http://www.cnblogs.com/chenwolong/p/LINQ.html

谢谢大家的支持!

@陈卧龙的博客

 

你可能感兴趣的文章
打开网站显示输入用户名和密码
查看>>
size_t的32位和64位兼容
查看>>
HBase全分布式模式的安装和配置
查看>>
Spring 框架的设计理念与设计模式分析
查看>>
十年web老兵整理的前端视频资料
查看>>
工作线程数究竟要设置为多少
查看>>
10个Python 统计报表/图表图形类库
查看>>
关于 xargs 参数被截断,tar 文件被覆盖的问题
查看>>
CentOS 6.3 上安装 Oracle 11g R2(转)
查看>>
js实现滚动新闻效果
查看>>
Nginx出现could not build the server_names_hash 解决办法
查看>>
Netbeans8在web项目中创建servlet
查看>>
高可用haproxy调度后端服务器实现动静分离集群架构
查看>>
Java 进行 RSA 加解密
查看>>
Hbase原理、基本概念、基本架构
查看>>
MQ 对比
查看>>
实战:RHEL6配置dhcp服务器并绑定主机IP
查看>>
RHEL7/centos7 安装XEN
查看>>
百度不收录原因分析——Spider抓取篇
查看>>
ROS记录上网日志到remote syslog服务器
查看>>