VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Objective-C编程 >
  • C#3.0新特性之隐式类型的局部变量和数组

 写在前边:

  用了aspdotnet一段时间了,对csharp还知之甚少,今天就从csharp的基本语法开始学习。内容多为前辈同仁们blog中已写过,加上自己得理解,只求能加深自己的印象,若能在cnblog中凑个数,那真是受宠若惊!

  一.C# 3.0语言主要增强点

  • 隐含类型局部变量

  • 扩展方法

  • 对象与集合初始化器

  • 匿名类型

  • Lambda表达式

  • 查询表达式( LINQ )

  • 表达式树

  二.隐式类型的局部变量和数组

  先来看看例句:

var i = 5;
var h = 23.56;
var s = "C Sharp";
var intArr = new[] { 1, 2, 3, 4 };
var a = new[] { 1, 10, 100, 1000 };
var str = new[] { "hello", null, "qun" };
var jcarr = new[]
{
new[] {1, 2, 3, 4},
new[] {5, 6, 7, 8}
};
var jcstr = new[]
{
new[] {"hello", "qun", "er", "wo"},
new[] {"xiang" , "ni", "le"}
};
var noname = new { name = "yaoyao", age = 24 };//匿名类型
var vlist = new List<int>();

  注:"var"这个关键字是不是很眼熟,javascript中经常用到(互相学习现在比较常见了),当然C#中var和javascript的var差别还是比较大。

  1.var只能作为局部变量使用;

  就是说var只能定义在一个方法里面,或者foreach,for,using等语句里面:

public class VarTest
{
private void test()
{
var i = 0;
}
}

 

  var关键字可以在以下四种场合中使用:

  •局部变量:

var i = 5;

  •在for初始化语句中:

for (var i = 0; i < 10;i++ )

  •在foreach初始化语句中下边将有例子;

  •在using语句中:

using (var file = new StreamReader("C:myfile.txt"))

  2.var可以申明任何类型变量,可以根据后面的初始化语句自动推断类型;

  这个和object有点像,但var是强类型,根据初始化表达式来定义变量的类型;

var i=0; i 是int类型
var str = "test"; str是string类型

  编译器自动推断用var定义的变量的类型,即是,在vs2008中,将鼠标移动到var i=0; 这句上的var关键字上,vs2008会智能提示为struct System.Int32,而且,如下的定义赋值语句完全正确:

int value = i;

  其它的情况,编译器也类似的自动推断变量的类型。

  3.var定义时,必须使用表达式初始化;

  也就是必须定义成 var i=0; 没有初始化编译会报错,而且初始化值不能为null,编译器无法根据null来推断出局部变量的类型;初始值除了int,string等数据类型外,还可以使用new 一个对象作为初始值(从网上大家发表的看法,var使用最多的就是配合一个匿名类型的对象来使用,以及在Linq中使用)

  配合匿名类型使用:

var a = new { Name = "maotin", Age = 99 };
Console.WriteLine(a.Name);
Console.WriteLine(a.Age);

  在linq中应用:

int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var queryLowNums =
from num in numbers
where num < 5
select num;
var expr = from c in cusomers where c.City == "beijing" select c;
foreach (var s in queryLowNums)
{
Console.Write(s.ToString() + " ");
}

 

  4.var和匿名类型:

string[] words = { "aPPLE", "biuEb", "cHeRry" };
var upperLowerWords =
from w in words
select new { Upper = w.ToUpper(), Lower = w.ToLower() };
foreach (var word in upperLowerWords)
{
Console.WriteLine("Uppercase:{0},Lowercase:{1}", word.Upper, word.Lower);
}

  注:

  很多时候var是可以省略的;

  但是在使用匿名类型初始化变量时,必须使用它;

  由于只有编译器知道匿名类型的名称,因此必须在源代码中使用它;

  如果已经使用了var初始化了查询变量,则还必须使用var作为对查询变量进行循环访问的foreach语句中迭代变量的类型。

  5.var使用建议

  一般var不要像“var i=9;”这样使用,程序可读性不高;在匿名类型中使用比较方便;foreach中使用也不错;var只是语言层面的东西,编译器会在编译的时候通过类型推断把它换成真正的类型。

  相关阅读:

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

  C#3.0新特性(二)-初始值设定项

  C#3.0新特性(三)-详说自动属性和匿名类型

  C#3.0新特性――隐含类型局部变量和匿名类型

  C#3.0新特性――自动生成属性

 

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

  C# 3.0中新匿名类型特性初体验

 

 

  var关键字可以在以下四种场合中使用:

  •局部变量:

var i = 5;

  •在for初始化语句中:

for (var i = 0; i < 10;i++ )

  •在foreach初始化语句中下边将有例子;

  •在using语句中:

using (var file = new StreamReader("C:myfile.txt"))

  2.var可以申明任何类型变量,可以根据后面的初始化语句自动推断类型;

  这个和object有点像,但var是强类型,根据初始化表达式来定义变量的类型;

var i=0; i 是int类型
var str = "test"; str是string类型

  编译器自动推断用var定义的变量的类型,即是,在vs2008中,将鼠标移动到var i=0; 这句上的var关键字上,vs2008会智能提示为struct System.Int32,而且,如下的定义赋值语句完全正确:

int value = i;

  其它的情况,编译器也类似的自动推断变量的类型。

  3.var定义时,必须使用表达式初始化;

  也就是必须定义成 var i=0; 没有初始化编译会报错,而且初始化值不能为null,编译器无法根据null来推断出局部变量的类型;初始值除了int,string等数据类型外,还可以使用new 一个对象作为初始值(从网上大家发表的看法,var使用最多的就是配合一个匿名类型的对象来使用,以及在Linq中使用)

  配合匿名类型使用:

var a = new { Name = "maotin", Age = 99 };
Console.WriteLine(a.Name);
Console.WriteLine(a.Age);

  在linq中应用:

int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var queryLowNums =
from num in numbers
where num < 5
select num;
var expr = from c in cusomers where c.City == "beijing" select c;
foreach (var s in queryLowNums)
{
Console.Write(s.ToString() + " ");
}

制作者:剑锋冷月



相关教程