代码改变世界

C#3.0之匿名类型

2007-09-16 19:14  蓝之风  阅读(303)  评论(0编辑  收藏  举报

VS2008 Beta2 终于出来了,迫不及待的想体验一下。这里记述一些我的使用体验和大家分享。
在这里我首先从C#3.0的语言本身来走马观花来体验语言层面给我带来那些惊喜。
从语言本身来看C#3.0直接带给我们的新特性主要包括一下几个方面:
1、隐含类型局部变量
2、 扩展方法
3、对象与集合初始化器
4、匿名类型
5、查询表达式(Linq)
这些新的特性都是在原来C#2.0的基础上进一步扩展演变过来的,很多事情通过让编译器去做而简化我们程序员的工作,这样可以减轻程序员的工作量而提高工作效率。
首先我们来体验一下,隐含类型局部变量这个特性:
            var sStr = "My String";
            var iInt = 100;
            var fFloat = 2.4;
            var arr = new[] { 1,2,3,4,5,6,6,7,8,9,10};
这里的变量声明都是合法的,前面的var 是C#3.0新增的关键字,有了这个关键字,编译器在编译这段代码时会自动的根据后面初始化的语句来推断出变量的类型。
var sStr = "My String";这条语句在编译器执行是会推断编译出 string sStr="My String"; 这里会将var 替换成 string 这里的var 不是一个具体的数据类型,它仅仅是个关键字,我们可以理解成占位符。
同样的道理 var iInt = 100;会编译成 int iInt=100;
                        var fFloat = 2.4;会编译成 float=2.4;
                        var arr = new[] { 1,2,3,4,5,6,6,7,8,9,10};会编译成 int [] arr = new[] { 1,2,3,4,5,6,6,7,8,9,10};
注意:
(1)这个var只用于局部变量,可以用于foreach语句,如foreach(var i in arr) 这时我们可以不用关心arr是什么类型;
(2)初始话语句必须是表达式,必须是编译器可以推断出来的类型,如果这样写是不合法的var a=null; 因为无法推断出null的类型是什么。

下面作个小小的例子加以验证:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CApp
{
    
class Program
    
{
        
static void Main(string[] args)
        
{            
            var i 
= 30;//隐式类型
            var b = 40;
            var arr 
= new[] 12344444433438 };
            
foreach (var j in arr) 
         
{
                Console.WriteLine(j);
            }

            Console.WriteLine(i);
            Console.WriteLine(b); 
                                                             
        }

    }

}

输出结果:
1
2
3
4
4
4
44
43
343
8
30
40