关于隐式类型,Nocturne Studio的博客文章(http://blog.csdn.net/zqustc/article/details/1868276)总结得很好,直接用它的就好了!

隐式类型变量的使用

    C# 3.0中引入了隐式类型变量(Implicitly Typed Variables)。从我的观点来看,它与object类型以及泛型有着相似的地方。它就是使用一个新的关键字var,来代替先前一般应用中的指定一个固定格式的变量类型(int、double、string等等)。看一个例子:

// 显式类型定义

int myInt = 0;
bool myBool = true;
string myString = "Nocturne Studio.";

    如果采用var关键字来定义,则可以写成如下的格式:

// Implicitly typed variables.

var myInt = 0;
var myBool = true;
var myString = "Nocturne Studio.";

    在这种情况下,编译器可以推断出myInt是System.Int32类型而myString是System.String类型,等等。使用GetType()方法可以获取它实际的数据类型

static void Main(string[] args)

{
// Implicitly typed variables.

var myInt = 0;
var myBool = true;
var myString = "Nocturne Studio.";
Console.WriteLine("The type of myInt is {0}", myInt.GetType().Name);
Console.WriteLine("The type of myBool is {0}", myBool.GetType().Name);
Console.WriteLine("The type of myString is {0}", myString.GetType().Name);
Console.ReadLine();
}

    输出的结果为:

查看更多精彩图片
    除此之外,还可以将数组、泛型以及类赋给var型变量,比如:

var evenNumbers = new int[] { 2, 4, 6, 8 };
var myDoubles = new List<double>();

   // 这里的int型数组evenNumbers还可以执行foreach语句进行迭代

foreach (var item in evenNumbers)

{

Console.WriteLine("Item value in evenNumbers: {0}", item);

}

  //  foreach里的item也可以用强类型int来指定,即写成

foreach (int item in evenNumbers)

{

Console.WriteLine("Item value in evenNumbers: {0}", item);

}

隐式类型变量的一些限制

    使用var关键字的时候还有些限制。首先,这种类型仅可以应用于方法或属性内部的局部变量,而不能用在字段、函数返回值和参数中。例如,下面的两个用法都是非法的:

class ErrorExamples

{

// var 不能用在字段中

private var myInt = 10;

// var 不能用在返回值或参数的类型上

public var MyMethod(var x, var y) { }

}

  //  VS2008的编辑器都不会将var标蓝,用以提醒程序员。 另外,用var关键字声明的局部变量必须在声明的同时赋值,并且不能被赋予null。
//比如下面的做法都是错误的:

// 错误,必须赋以初值

var myData;

// 错误,必须在声明的同时赋值

var myInt;

myInt = 0;

// 错误,初值不能赋以null

var myObj = null;

// 正确,在赋初值之后再指向null

var myDoubles = new List<double>();

myDoubles = null;

// 正确,用已有的变量来赋初值

var myInt = 0;

var myAnotherInt = myInt;

隐式类型数组

    与局部变量相同地,可以定义隐式类型数组。演示如下:

// 实际上是int[]

var arrayA = new[] { 1, 2, 3, 4 };

// 实际上是double[]

var arrayB = new[] { 1, 0.5, 3.14, 2.71828 };

// 实际上是string[]

var arrayC = new[] { "Nocturne", null, "Studio", "SpadeQ" };

// 错误,不允许混合类型

var arrayD = new[] { 1, "one", 2, "two" };

    目前看来,我还不是很清楚这项技术的具体应用,滥用这项技术肯定会对代码的可读性造成破坏。后面我会进一步去了解LINQ的相关资料,应该能够找到答案。 敬请期待 :-)

 

注意:本文来自Nocturne Studio的博客文章(http://blog.csdn.net/zqustc/article/details/1868276

posted on 2012-10-17 15:02  xjc  阅读(246)  评论(0编辑  收藏  举报