现在的位置: 首页 > 综合 > 正文

[转]Anonymous type and implicit type

2012年05月29日 ⁄ 综合 ⁄ 共 1079字 ⁄ 字号 评论关闭
  • 来自:http://social.msdn.microsoft.com/Forums/de-DE/visualcshartzhchs/thread/4b55fc5b-fa87-4861-b1e3-3be397612872

     

    隐式类型
    从Visual C# 3.0开始,在方法体内可以声明隐式的变量类型VAR。我们可以按照以下显示的方法使用修饰符VAR
    告诉编译器推断和声明类型:
    var i = 23;      // int i = 23;
    var s = "Hello"; // string s
    = "Hello";
    数组也可以被声明为隐式类型:
    var a = new[] { 1, 2, 3, 4 }; // int[]
    var b
    = new[] { "hello", null, "world" }; // string[]
    var c = new[] { a, new[] { 5,
    6, 7, 8 } }; // 长度不确定的数组

    注意:
    声明隐式类型的变量有以下限制:
    • VAR只能被用于局部变量声明时,且需要即时初始化;此变量不能被初始化为null,因为null就像lambda表达式或者方法一样没有类型。但是,可以被初始化为一个得到null值的表达式,只要这个表达式有类型。
    • var不能用作类的字段
    • var类型声明的变量不能用作自己初始化的表达式中
    换言之,var
    v=v++;将会在编译时报错
    • 复合的隐式类型不能被同时初始化
    • 如果在作用域中,我们定义了一个var类型的变量,尝试用var关键字初始化一个局部变量,编译时会报错。
    其他的相关信息可以参考Implicitly
    Typed Local Variables (C# Programming Guide)和Type Relationship in LINQ Query
    Operations (C#)。

    匿名类型
    匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需首先显式定义一个类型。
    类型名由编译器生成,并且不能在源代码级使用。 这些属性的类型由编译器推断。 下面的示例演示一个用两个分别名为 Amount 和 Message
    的属性初始化的匿名类型。
     var v = new { Amount = 123, Message = "Hello"
    };
    匿名类型是由一个或多个公共只读属性组成的类类型。
    不允许包含其他种类的类成员(如方法或事件)。
    注意:
    匿名类型的一些规则:
    • 除了第二点的情况下,必须为使用表达式初始化的属性提供名称
    • 如果没有在匿名类型中指定成员名称,编译器会为匿名类型成员指定与用于初始化这些成员的属性相同的名称
    • 匿名类型具有方法范围
    其他细节信息,请参考Anonymous
    Types (C# Programming Guide)

抱歉!评论已关闭.