前言

说到底就是优先使用var,这个关键字,在c# 3.0中出现了。

首先要确认几点,一个就是var 是静态变量,而不是动态变量,也就是说使用var 你是不必去担心性能问题得,

百度百科:

1)静态存储变量通常是在变量定义时就分定存储单元并一直保持不变,直至整个程序结束。静态变量,全局动态变量都是静态存储

2)动态存储变量是在程序执行过程中,使用它时才分配存储单元,使用完毕立即释放

3)静态存储变量是一直存在的,而动态存储变量则时而存在时而消失。通常把由于变量存储方式不同而产生的特性称为变量的生存期

4)静态存储只会初始化一次

好的,既然其不会影响性能问题,也就是说我们写代码根据规范,那么问题不大。

正文

首先说明var 为什么出现,也就是其中的好处:

1.为了支持匿名类型机制。

2.解放我们的双手,让我们在轻易可以推断类型的情况下,可以用var 去代替,同样可以避免我们走入一些误区。如IQueryable和IEnumberable的区别。

那么使用var 该注意什么?

使用var,对我们的命名要求更高了。

 var some=createsomething();
var i=Factor.create(args);

这样写,可能会被打死。

使用var 的时候,对命名的要求更加高了。

如:

 var account=createaccount();
var boyList=Factor.create(args);

那么这时候我们就知道了变量account 是一个account 实例,boyList是一个list类型。

那么那些领域最好var 不要去使用呢?

1.一切的初始化,最好不要去用var。

var 会帮助我们推断初始化变量,比如我们使用var 去这样:

var student=new Student();

这就是一个坑,因为我们会参数歧义,var 可能是Istudent,或者其父类,会影响我们编程体验。

2.一切的计算,最好不要去使用var。

var d=1.1;
var total=d*100;

这时候total是double 类型的,那么问题关键是你想要total是double类型吗?可能是想要的是一个int。

而还可能出现这种情况:

var d=getresule(args);
var total=d*100;

args 代表参数,假如getresule 会根据参数的不同返回,int 或者 float。

那么很有可能在作者写code的时候,会忽略total的类型。

那么在什么情况下,最好使用var呢?linq情况下,最好使用var。

var q=from s in db.student
select s.name
var q2=q.where(s=>s.name=="张三");

IEnumberable<student> q=from s in db.student
select s.name
var q2=q.where(s=>s.name=="张三");

这两者区别非常大,第二个首先会查出所有的name,然后过滤张三。第一个则只是去数据库里查询张三。

总结

var 在不会在编译器产生误解的时候使用,一般在数据返回结果的时候使用,检验标准为能够立马知道数据的类型。

c# 优化代码的一些规则——优先隐式类型[一]的更多相关文章

  1. .NET中那些所谓的新语法之一:自动属性、隐式类型、命名参数与自动初始化器

    开篇:在日常的.NET开发学习中,我们往往会接触到一些较新的语法,它们相对以前的老语法相比,做了很多的改进,简化了很多繁杂的代码格式,也大大减少了我们这些菜鸟码农的代码量.但是,在开心欢乐之余,我们也 ...

  2. C#中的隐式类型var——详细示例解析

    从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型var.隐式类型可以替代任何类型,它的具体类型由编译器根据上下文推断而出. 下面就让我来总结下隐式类型的一些特点: 1.va ...

  3. Linq之隐式类型、自动属性、初始化器、匿名类

    目录 写在前面 系列文章 隐式类型 自动属性 初始化器 匿名类 总结 写在前面 上篇文章是本系列的小插曲,也是在项目中遇到,觉得有必要总结一下,就顺手写在了博客中,也希望能帮到一些朋友.本文将继续介绍 ...

  4. C#隐式类型

    隐式类型 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sys ...

  5. C#语法糖之第一篇:自动属性&隐式类型

    今天给大家分享一下C#语法糖的简单的两个知识点吧. 自动属性:在 C# 4.0 和更高版本中,当属性的访问器中不需要其他逻辑时,自动实现的属性可使属性声明更加简洁. 客户端代码还可通过这些属性创建对象 ...

  6. C#杂记-隐式类型的局部变量

    基础知识:方法中声明的变量,叫局部变量 普通局部变量:有明确数据类型. string name; 隐式类型的局部变量:使用“var”代替明确的数据类型. var name = "abc&qu ...

  7. C#3.0新特性:隐式类型、扩展方法、自动实现属性,对象/集合初始值设定、匿名类型、Lambda,Linq,表达式树、可选参数与命名参数

    一.隐式类型var 从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型var.隐式类型可以替代任何类型,编译器自动推断类型. 1.var类型的局部变量必须赋予初始值,包括匿名 ...

  8. 【C#】隐式类型var

    在.NET 3.0后微软引入了隐式类型var,编译器可以自动判断变量的类型,通过var这个隐式类型,可以提高开发人员的开发效率,很多时候可以不考虑对象的类型,编译器会自动帮我们判断 使用隐式类型和使用 ...

  9. C#中的自动属性、隐式类型var、对象初始化器与集合初始化器、扩展方法

    1.自动属性(Auto-Implemented Properties) //以前的写法 .net2.0 private string _userName; public string UserName ...

随机推荐

  1. 关于SpringBoot集成myBatis时,mapper接口注入失败的问题

    问题描述: 在Spring Boot集成myBatis时,发现启动时,mapper接口一直注入失败. 现象如下: VehicleDAO就是需要的mapper对象,一个简单的接口. 已经在applica ...

  2. 云时代 • 新契机:2017届中国SaaS产业大会圆满落幕

    2017年5-6日,由拓普会展携手中国云体系产业创新战略联盟主办,江苏省企业信息化协会,浙江省企业信息化促进会,广东省首席信息官协会,CIO时代学院,IDC点评网协办以及上海市网购商会,中国信息化推进 ...

  3. 《C程序设计语言》 练习2-1

    问题描述 编写一个程序以确定分别由signed及unsigned限定的char.short.int及long类型变量的取值范围.采用打印标准头文件中的相应值以及直接计算两种方式实现 Write a p ...

  4. 布局问题杂(html和css)

    \(一.删除线可以用一对strike标签括起来\) <p><strike>删除线可以用一对strike标签括起来</strike></p> \(\col ...

  5. Re模块的 三个方法

    import re s1 = '绿茶白茶黄茶青茶红茶黑茶' s2 = '中国绿茶白茶黄茶青茶红茶黑茶' ret = re.findall(".茶", s1) print(ret) ...

  6. Linux查看redis占用内存的方法

    redis-cli auth 密码info # Memory used_memory:13490096 //数据占用了多少内存(字节) used_memory_human:12.87M //数据占用了 ...

  7. 第3章:关系数据库标准语言 SQL

    目录 第3章:关系数据库标准语言 SQL 3.1.SQL概述 3.1.1.历史 3.3.2.SQL语言的功能 3.3.3.SQL的特点 3.3.4.基本概念 3.2.学生-课程数据库 3.3.数据定义 ...

  8. kafka简介及集群部署

    消息队列概念:(Message queue): “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象. “消息队列”是在消息的传输过程中保存消 ...

  9. Spring源码阅读 之 bean的注册

    在前面我们已经学习了配置的加载,读取,解析.现在我们已经能够将一份配置转变成对应的一个个beandefinition了,我们知道Spring是一个IOC的容器,那么我们如何将这个一个个beandefi ...

  10. Json格式数据的解析

    JSON是一种轻量级的数据交换格式,我们在编程中遇到的JSON数据通常就是一串字符串,只不过按照特定的格式去书写,这样当你把JSON数据传输给别人的时候对方只要使用这种特定的规则去阅读解析你的数据即可 ...