科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件2. Implicitly Typed Local Variables(隐式类型)与Implicitly Typed Array(隐式类型数组)

2. Implicitly Typed Local Variables(隐式类型)与Implicitly Typed Array(隐式类型数组)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

隐式类型数组中的元素可以通过匿名对象初始器来创建匿名类型的数据结构。

作者: ZeroCool 来源:CSDN 2008年2月9日

关键字: 隐式类型数组 隐式类型 Linux

  • 评论
  • 分享微博
  • 分享邮件

写过JavaScript的朋友或许早就一眼盯住了上文中提到的新关键字“var”,是啊,多么熟悉的字眼儿,如今竟然也在C#当中出现了!如何使用呢?让我们来看一段很简短的代码吧:

1: static void Main(string[] args)

2: {

3: var name = "ZeroCool";

4: var age = 24;

5: 

6: Console.WriteLine(name + " is " + age + " years old.");

7: }

如果您是在C# 3.0中编写这段代码,那么就可以运行。也许您会问,用var有什么好处呢,是否object也可以代替它呢?是的,可以代替,object是基类型,当然可以用它来声明任何类型的变量。但是,如果用object来声明值类型就会引起装箱操作,这会降低性能。另外,如果您要用几个object声明的变量进行运算的话,您必须得把它们挨个转换成相应的类型才行,这样做其实是费力不讨好的。关键字var的优点就在于它使得您可以非常便利地声明隐式类型变量,编译器可以在用到该变量的时候根据它的值来反推出它的类型。注意,var并不是具体的变量类型,它只是一个声明符,它的作用就是将数据类型的声明交给编译器去做。您可以用它来声明任何类型的变量,正如上一段程序中的变量age,您肯定知道它是一个int型变量,但实际上您写下这句代码的时候它还不是,只有在编译的时候编译器根据它的值反推出它是int型时,它才是真正意义上的int型。

前面看到的是用var关键字声明一些简单类型的变量,那么复杂类型的变量例如数组、集合等,是否也可以使用var关键字呢?答案是肯定的,请看:

1: static void Main(string[] args)

2: {

3: var memberNames = new[] { "ZeroCool", "Michael", "Somebody" };

4: 

5: foreach (var item in memberNames)

6: {

7: Console.WriteLine(item.ToString());

8: }

9: 

10: Console.ReadLine();

11: }

上面这段代码是可以正常运行的,同样的,.NET为我们提供的其它类型我们都可以用var来声明,同时也包括用户自定义类型。

另外,更强大的一点是,隐式类型数组中的元素可以通过匿名对象初始器来创建匿名类型的数据结构,例如:

1: static void Main(string[] args)

2: {

3: var memberInfo = new[] {

4: {

5: Name = "ZeroCool",

6: Details = new[] { "ZeroCool@Autumoon.com", "China" }

7: },

8: {

9: Name = "Michael",

10: Details = new[] { "Michael@Mail.com", "China", "Programmer" }

11: }

12: };

13: }

但是在使用var关键字声明变量的时候有几点注意事项:

    1. 声明变量时必须初始化;
      • 错误:var name;
    2. 初始器必须是一个表达式;
      • 错误:var names = {"ZeroCool", "Autumoon"};
    3. 初始器表达式必须是一个不为null类型的编译时类型;
      • 错误:var name = null;
    4. 局部变量的声明中不能包含多个声明符;
      • 错误:var name = "ZeroCool", country = "China";
    5. 初始器不能使用被声明变量自身;
      • 错误:var name = name + " A";
    6. 隐式类型数组在声明时必须确保数组内部成员的类型唯一;
      • 错误:var names = new[] {"ZeroCool", 123};

 

查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章