浅谈C# 匿名变量
每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!当然,希望将来的一天,某位老板看到此博客,给你的程序员职工加点薪资吧!因为程序员的世界除了苦逼就是沉默。我眼中的程序员大多都不爱说话,默默承受着编程的巨大压力,除了技术上的交流外,他们不愿意也不擅长和别人交流,更不乐意任何人走进他们的内心,他们常常一个人宅在家中!
闲话说多了,咱进入正题:
首先讲解下匿名变量,在讲解匿名变量之前,我先通过代码展示匿名变量的声明,如下:
static void Main()
{
var A = ;//在此,A会被解析为int类型 和 int A=1;是一模一样滴
var AA = "";//AA会被解析为string类型 和 string AA="";是一模一样滴
var AAA = new[] {,,,, };//AAA会被解析为int类型数组 和 int[]类型是一模一样滴
var B = new { };//B会被解析为一个空的对象/集合,没有什么属性 和object B=new {};是一模一样滴
var BB = new { userName = "Jack.Chen", Sex = "男", Age = , Address = "中国-苏州" };//BB会被解析为一个拥有属性的对象 和preson类型是一模一样滴
var BBB = new[] { new preson { UserName = "Jack.Chen", Sex = "男", Age = , Address = "中国-苏州" }, new preson { UserName = "Loose-Li", Sex = "女", Age = , Address = "中国-上海" }, new preson { UserName = "cathy", Sex = "女" } };//BBB会被解析为一个preson对象集合 和List<person>类型是一模一样滴
}
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<preson> pres = new List<preson> { new preson { UserName = "Jack.Chen", Sex = "男", Age = , Address = "中国-苏州" }, new preson { UserName = "Loose-Li", Sex = "女", Age = , 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 = , Address = "中国-苏州" }, new preson { UserName = "Loose-Li", Sex = "女", Age = , Address = "中国-上海" }, new preson { UserName = "cathy", Sex = "女" } };//BBB会被解析为一个preson对象集合 和List<person>类型是一模一样滴
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
谢谢大家的支持!
@陈卧龙的博客
浅谈C# 匿名变量的更多相关文章
- 浅谈JavaScript匿名函数与闭包
一. 匿名函数 //普通函数定义: //单独的匿名函数是无法运行的.就算运行了,也无法调用,因为没有名称. 如: function(){ alert('123'); ...
- 浅谈C语言变量声明的解析
C语言本身提供了一种不甚明确的变量声明方式——基于使用的声明,如int *a,本质上是声明了*a的类型为int,所以得到了a的类型为指向int的指针.对于简单类型,这样声明并不会对代码产生多大的阅读障 ...
- 浅谈javascript的变量作用域
1.变量遵循先声明再使用. console.log(b); b=123; 代码运行结果: Uncaught ReferenceError: b is not defined 2.方法内定义的局部变量外 ...
- 浅谈JS的变量提升
JS的解析机制,是JS的又一大重点知识点,在面试题中更经常出现,今天就来唠唠他们的原理.首先呢,我们在我们伟大的浏览器中,有个叫做JS解析器的东西,它专门用来读取JS,执行JS.一般情况是存在作用域就 ...
- 浅谈class私有变量
class 的前世今生 在 es6 之前,虽然 JS 和 Java 同样都是 OOP (面向对象)语言,但是在 JS 中,只有对象而没有类的概念. 在 JS 中,生成实例对象的传统方法是通过构造函数, ...
- 浅谈javascript中变量作用域和内存(1)
先理解两个概念:基本类型和引用类型的值 1.基本类型和引用类型的值 (1)定义: 基本类型:指简单的数据段,比如按值访问的js五种基本数据类型undefined.null.boolean.number ...
- 浅谈javascript中变量作用域和内存(2)
1.无块级作用域 javascript没有块级作用域,这会让其他程序员在理解js代码上很痛苦.在其他很多语言,比如C,大括号括起来的代码块都有自己的作用域 举个例子 if(true) { var na ...
- 浅谈 PHP 变量可用字符
原文:浅谈 PHP 变量可用字符 先来说说php变量的命名规则,百度下一抓一大把:(1) PHP的变量名区分大小写;(2) 变量名必须以美元符号$开始;(3) 变量名开头可以以下划线开始;(4) 变量 ...
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...
随机推荐
- Linux 执行ThinkPHP 文件的计划任务
执行例如 http://192.168.1.32/index.php?s=/Home/Cron/yue 这样的 url 的计划任务 方式① */ * * * * curl http://192.168 ...
- Web 在线文件管理器学习笔记与总结(1)初始文件以及获取首层目录信息
在线文件管理器即使用浏览器管理和操作项目中的目录和文件 文件相关操作包括: 1.创建文件 2.判断文件的权限 3.文件的大小 4.文件的创建时间.修改时间.访问时间 5.查看文件的内容 6.修改文件的 ...
- 实现LoadRunner多个场景的顺序执行(命令行)
应用场景:假设有3个不同的测试场景,分别为并发登录.核心业务.可靠性测试,3个场景有先后执行顺序.由于白天测试机器另有用处,只能在晚上进行性能测试,这时我们的期望是能否把测试场景都设定好之后晚上自动运 ...
- <?php set_time_limit(10);
<?php include('w_fun.php'); set_time_limit(10); Fatal error: Maximum execution time of 10 seconds ...
- dynamic-link library shared library of functions and resources
https://msdn.microsoft.com/en-us/library/1ez7dh12.aspx A dynamic-link library (DLL) is an executable ...
- 其他常用HTML 片段
1.input placeholder 文字居中 字体大小+上下padding值等于设计稿宽度 设计稿中总高度为86px padding:27px 0;font-size:30px; 2.英文 ...
- ArcGIS中如何导出单个矢量要素图形
原文:ArcGIS中如何导出单个矢量要素图形 在ARCGIS中载入了一张含有省界的中国地图,是SHP文件.现在我只想要其中一块地区的,实现方法如下: 加入到ArcGIS后,右击图层,打开属性表(att ...
- 转:ASP.NET MVC + EF 更新的几种方式
1.常用 db.Entry(实体).State = EntityState.Modified;db.SaveChanges(); 2.指定更新 db.Configuration.ValidateOnS ...
- MVC从服务器端返回js到客户端的方法(总结)
1.利用ViewBag,从服务器端创建一个显示js开关的ViewBag,然后到View中去做判断. Controller端 [HttpPost] public ActionResult Index(h ...
- Java学习-031-JSON 之五 -- 特定数据获取(JSONObject满足特定键值)
前面几篇博文分别讲述了 JSON 的 概要知识.简单数据获取.封装cssSelector数据获取方法.JSONObject 是否包含 key_value,请自行阅读相关博文. 在日常的接口测试脚本编写 ...