C#3.0新特性之隐式类型局部变量的使用

变量

  首先说明一下,此新特性的专题基于MS五月份分布的C#3.0规范,但是官方中文版还没有出来,结合自己的实践和理解,希望能和大家一起分享某些前沿的东东,很有可能一些地方会出错,望抛砖。

  在C# 3.0里面, 可以对局部变量进行隐式类型声明, 就是在声明时可以不指定该变量的类型, 变量在初始化的时候会由编译器从表达式的上下文中推出真正的类型, 对开发者来说, 无疑是简化了很多, 主要是通过新的关键字var, 有如下面的例子:

var i = 5;
var s = "Hello";
var d = 1.0;
var numbers = new int[] {1, 2, 3};
var orders = new Dictionary<int, Order>();
  其实上面的声明方法和之前在1.x和2.x中以下的声明方法是等效的:

int i = 5;
string s = "Hello";
double d = 1.0;
int[] = new int[] {1, 2, 3};
Dictionary<int, Order> orders = new Dictionary<int, Order>();
  方便是绝对的, 就像我们之前在某些别的高级语中, 早就实现了此功能, 但是对某局部变量进行隐式类型声明, 也要遵循一定的条件限制:

  - 声明变量时, 必须对该变量进行初始化.

  - 初始化该变量时, 必须使用对应的表达式, 而不能简单地用一个对象或是集合本身, 但如果是使用了关键字new创建的对象或是集合却是合法的, 因为那已经是一个表达式了.

  - 变量初始化的表达式在编译时, 绝对不可以是null类型.

  - 如果将要进行隐式类型声明的局部变量包含多个声明, 则要保证每个初始化表达式都有相同的编译时类型, 保持类型一致, 不能一会是int, 一会又变成了int[].

  下面我们来看几个有误的声明例子:

  例子1:

var x; //声明变量时没有初始化
  例子2:

var y = {1, 2, 3}; //集合本身不能作为初始化表达式
  例子3:

var z = null; //编译时类型不允许为null
  在现行的Orcas编译环境下, 可以使用var声明局部变量, 同时也向后兼容, 即原来的方式是可用的. 另外, 根据MS官方的文档说来, var声明适用于for语句的初始化表达式中, 在using语句中资源获得时也可用, 举个例子可以在foreach语句中的迭代变量应用var:

var numbers = int[] { 1, 3, 5, 7, 9};
foreach(var n in numbers) Console.WriteLine(n);
  不过这样用的前提要求该集合类型必须可以枚举, var就可以自动被编译器认作int类型了。

时间: 2024-08-30 18:49:08

C#3.0新特性之隐式类型局部变量的使用的相关文章

C#3.0语言新特性之隐式类型

20.1 隐式类型 在C#3.0中增加了一个变量声明var,这个声明和JavaScript 的var类似,但 也有不同.相同之处是它可以用var来声明任何类型的局部变量:而不同之处在 于它仅仅负责告诉编译器,该变量需要根据初始化表达式来推断变量的类型,而 且只能是局部变量. 20.1.1 隐式类型局部变量的声明与使用 在C# 3.0中,引进了一个新的关键字叫做var.var允许你声明一个新变量, 它的类型是从用来初始化器变量的表达式里隐式的推断出来的,即在声明时,你 不需要给它定义类型,它会根据

C#3.0 新特性之隐式类型化数组

C#3.0这个特性是对隐式类型化本地变量的扩展,有了这个特性,将使我们创建数组的工作变得简单.我们可以直接使用"new[]"关键字来声明数组,后面跟上数组的初始值列表.在这里,我们并没有直接指定数组的类型,数组的类型是由初始化列表推断出来的. class AnonymousTypeArray : AppRunner.AbstractApplication { public override void Run() { var intArray = new[] { 1, 2, 3, 4,

C# 3.0新特性系列:隐含类型var

一.神奇的var 在C#3.0中增加了一个变量声明var,这个声明和JavaScript 的 var类似,但 也有不同. 1. 相同点,它可以用var来声明任何类型的局部变量. 2. 不同点,它仅仅负责告诉编译器,该变量需要根据初始化表达式来推断变 量的类型,而且只能是局部变量. 二.相同点 它可以声明 var integer = 10; var name = "edisundong"; var numbers = new int[] { 1, 2, 3 }; 三.不同点 var仅仅是

JDK5.0新特性系列---目录

  JDK5.0新特性系列---目录   JDK5.0新特性系列---1.自动装箱和拆箱   JDK5.0新特性系列---2.新的for循环 JDK5.0新特性系列---3.枚举类型 JDK5.0新特性系列---4.静态导入 JDK5.0新特性系列---5.可变长参数Varargs JDK5.0新特性系列---6.格式化输出 JDK5.0新特性系列---7.使用ProcessBuilder执行本地命令 JDK5.0新特性系列---8.泛型编程 JDK5.0新特性系列---9.注释功能Annota

C# 3.0语言新特性(语言规范):1 具有隐式类型的局部变量

变量|规范 原文:<C# Version 3.0 Specification>,Microsoft翻译:lover_P 在一个具有隐式类型的局部变量声明(implicitly typed local variable declaration)中,被声明的局部变量的类型是通过初始化该变量的表达式推断出来的.当使用局部变量声指示符符var来代替类型,并且当前作用域内没有名为var的类型时,这个声明便成为一个具有隐式类型的局部变量声明.例如: var i = 5; var s = "Hel

C# 3.0语言新特性(语言规范):6 具有隐式类型的数组

规范|数组 原文:<C# Version 3.0 Specification>,Microsoft翻译:lover_P 数组创建表达式的语法被扩展为支持具有隐式类型的数组创建表达式: array-creation-expression:...new  [  ]  array-initializer 在一个具有隐式类型的数组创建表达式中,数组实例的类型通过数组初始化器中指定的元素来推断.特别地,数组初始化器中的表达式类型形成的集合中,必须恰好有一个类型使得其他类型都可以隐式地转换为该类型,并且该

C#3.0新特性(一)-隐式类型的局部变量和数组

写在前边: 用了aspdotnet一段时间了,对csharp还知之甚少,今天就从csharp的基本语法开始学习.内容多为前辈同仁们blog中已写过,加上自己得理解,只求能加深自己的印象,若能在cnblog中凑个数,那真是受宠若惊! 一.C# 3.0语言主要增强点 • 隐含类型局部变量 • 扩展方法 • 对象与集合初始化器 • 匿名类型 • Lambda表达式 • 查询表达式( LINQ ) • 表达式树 二.隐式类型的局部变量和数组 先来看看例句: var i = 5; var h = 23.5

C# 3.0新特性体验之Lambda表达式

C#2.0介绍了一个新特性--匿名方法,允许开发者在线(inline)声明自己的函数代码而无须使用委托函数(delegate function).C#3.0中提供了一个新特性--Lambda表达式,它提供了完成相同目标的更加简洁的格式.让我们在讨论Lambda表达式以前仔细研究一下匿名方法. 匿名方法 假设你需要创建一个按钮,当点击它的时候更新ListBox里的内容.在C#1.0和1.1里,你要这样做: public MyForm(){ listBox = new ListBox(...); t

Visual C# 3.0新特性概览

在发布Visual Studio 2005和C#2.0之后,微软公司又马不停蹄的展示了人们所期望的C#的下一代版本:C# 3.0.尽管C# 3.0并没有标准化,微软还是在PDC(专业程序员会议)发布了一个预览版本,因此心急的程序员可以看到一些所期望的特性,这也是本文所讨论的主要内容: ·隐式类型本地变量 ·匿名变量 ·扩展方法 ·对象和Collection初始化符 ·Lambda表达式 ·查询表达式 ·表达式树 隐式类型本地变量 C# 3.0引进了一个新的关键字叫做"Var".Var允