前言

说到底就是优先使用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. 如何把字符串数组从 Swift 传递给 C

    作者:Natasha The Robot,原文链接,原文日期:2016-10-27译者:BigbigChai:校对:walkingway:定稿:CMB Swift 允许我们将原生的字符串直接传递给一个 ...

  2. 记一次Pinpoint监控工具部署过程

    环境:Centos 7.4 X64IP:192.168.1.11 1.配置环境,先安装jdk 到Oracle官网下载安装JDK https://www.oracle.com/technetwork/j ...

  3. dlopen failed: empty/missing DT_HASH in "libx.so" (built with --hash-style=gnu?)

    崩溃日志内容: java.lang.UnsatisfiedLinkError: dlopen failed: empty/missing DT_HASH in "libxxxx.so&quo ...

  4. Hadoop学习笔记(三) ——HDFS

    参考书籍:<Hadoop实战>第二版 第9章:HDFS详解 1. HDFS基本操作 @ 出现的bug信息 @-@ WARN util.NativeCodeLoader: Unable to ...

  5. Java的类锁、对象锁和方法锁

    在Java中,对于synchronized关键字,大家看到的第一反应就是这个关键字是进行同步操作的,即得名"同步锁". 当用它来修饰方法和代码块时,默认当前的对象为锁的对象,即对象 ...

  6. andorid jar/库源码解析之okio

    目录:andorid jar/库源码解析 Okio: 作用: 说白了,就是一个IO库,基于java原生io.来进行操作,内部做了优化,简洁,高效.所以受到了一部分人的喜欢和使用 栗子: 读写文件. p ...

  7. php5与php7安全性的区别

    0X01 前言 本篇文章大多为转载,但是修正了一些不正确的说法,对某些功能点的变更指出具体是哪个版本变更,加入了一些小更新. (原文地址:https://www.freebuf.com/article ...

  8. Navicat12.1系列安装,破解以及破解navicat报错的解决方案

    由于上课的需要,我们必须自己下载并安装 Navicat Premium 12,虽然安装过程很简单,但是安装后的navicat只能试用,并没有永久激活,然而我还想永久使用,所以就各种百度,因为不断地遇到 ...

  9. arangodb安装

    这里仅介绍windows环境下的安装,直接官网下载安装包安装即可.安装完后进入安装目录进行配置. cd ArangoDB\\etc\\arangodb3 打开arangod.conf配置文件,修改以下 ...

  10. JUC之ReentrantLock源码分析

    ReentrantLock:实现了Lock接口,是一个可重入锁,并且支持线程公平竞争和非公平竞争两种模式,默认情况下是非公平模式.ReentrantLock算是synchronized的补充和替代方案 ...