class MyClass
{
    static void Main(string[] args)
    {
        object o = new { };
        System.Console.WriteLine(o.GetType());        System.Console.ReadKey();
    }
}//<>f__AnonymousType0

解决方案 »

  1.   

    @lzsh0622
    这段代码没有语法错误,
    而且能够正常运行。追加一个问题,
    这是什么样的语法?
      

  2.   

    我的环境(vs2005 WINFORM C# )过不去. 
      

  3.   

    哦,有可能,
    我是VS2008,Console类型输出结果为:
    <>f__AnonymousType0
      

  4.   


    @谢谢,键健
    长见识了,第一次接触匿名类型传统的类型就这些:类|结构|数组|委托|枚举|接口能不能具体讲一下,
    特别是他的根类型是什么
    (非指object,象数组是System.Array)
      

  5.   

    匿名对象,理解成javascript里的弱类型变量就是了,大体上就像是个指向匿名结构体的指针吧
      

  6.   

    匿名类型是由一个或多个公共只读属性组成的类类型。
    不允许包含其他种类的类成员(如方法或事件)。匿名类型不能强制转换为除 object 以外的任何接口或类型。 是不是能跟传统类型相提并论~~
      

  7.   

    匿名类型是直接从 object 继承的无名类类型。匿名类型的成员是从用于创建该类型的实例的匿名对象初始值设定项推断出的一系列只读属性。MSDN中有如下信息:
     匿名类型是直接从对象派生的引用类型。尽管应用程序无法访问匿名类型,但编译器仍会为其提供一个名称。从公共语言运行时的角度来看,匿名类型与任何其他引用类型没有什么不同,唯一区别在于匿名类型无法强制转换为除 object 以外的任何类型。如果两个或更多个匿名类型以相同的顺序具有相同数量和种类的属性,则编译器会将这些匿名类型视为相同的类型,并且它们共享编译器生成的相同类型信息。匿名类型具有方法范围。若要向方法边界外部传递一个匿名类型或一个包含匿名类型的集合,必须首先将匿名类型强制转换为对象。但是,这会使匿名类型的强类型化无效。如果必须存储查询结果或者必须将查询结果传递到方法边界外部,请考虑使用普通的命名结构或类而不是匿名类型。匿名类型不能像属性一样包含不安全类型。由于匿名类型上的 Equals 和 GetHashCode 方法是根据属性的 Equals 和 GetHashcode 定义的,因此仅当同一匿名类型的两个实例的所有属性都相等时,这两个实例才相等。 
      

  8.   

    自测一下,并没有发现中间类型,
    直接继承至object所以不能算结构,奇了怪了,跟传统类型还真的不一样。!dso
    PDB symbol for mscorwks.dll not loaded
    OS Thread Id: 0x1dcc (7628)
    ESP/REG  Object   Name
    0012f09c 01377ea4 <>f__AnonymousType0
    0012f0c0 01377ea4 <>f__AnonymousType0
    0012f0c8 01377ea4 <>f__AnonymousType0
    0012f160 01377ea4 <>f__AnonymousType0
    0012f204 01377ea4 <>f__AnonymousType0
    0012f208 01377ea4 <>f__AnonymousType0
    0012f214 01377ea4 <>f__AnonymousType0!do 01377ea4
    Name: <>f__AnonymousType0
    MethodTable: 009e32c8
    EEClass: 009e1388
    Size: 12(0xc) bytes
    Fields:
    None!dumpclass 009e1388
    Class Name: <>f__AnonymousType0
    Parent Class: 0339d08c
    Module: 009e2e58
    Method Table: 009e32c8
    Vtable Slots: 4
    Total Method Slots: 5
    Class Attributes: 100100  
    NumInstanceFields: 0
    NumStaticFields: 0!dumpclass 0339d08c
    Class Name: System.Object
    mdToken: 02000002 (C:\WINDOWS\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll)
    Parent Class: 00000000
    Module: 03362000
    Method Table: 0339d0f0
    Vtable Slots: 4
    Total Method Slots: e
    Class Attributes: 102001  
    NumInstanceFields: 0
    NumStaticFields: 0
      

  9.   


    此结构非彼结构,我说是一个数据结构,不是struct
      

  10.   


    这个值得研究一下:
    using System;class MyClass
    {
        static void Main(string[] args)
        {
            object o1 = new { };
            object o2 = new { };
            object o3 = new { i = 1, s = "abc" };
            object o4 = new { s = "eee", i = 1 };        f__AnonymousType type = new         System.Console.WriteLine("o1:{0},o2:{1},o3:{2},o4:{3}", o1.GetType(), o2.GetType(), o3.GetType(), o4.GetType());        System.Console.ReadKey();
        }
    }//o1:<>f__AnonymousType0,
    //o2:<>f__AnonymousType0,
    //o3:<>f__AnonymousType1`2[System.Int32,System.String],
    //o4:<>f__AnonymousType2`2[System.String,System.Int32]f__AnonymousType这个也算是基类型的,
    与传统的基不一样的地方在于:
    (1)不能显式引用
    (2)与泛型挂钩了
      

  11.   


            static void Main(string[] args)
            {
                var stu = new { Name = "XiaoShan", Age = 21 };
                Console.WriteLine(stu.Name);
            }楼主不妨试一下这段代码,很简单,一看就懂了
      

  12.   

    给匿名类型增加方法:
    http://space.cnblogs.com/question/3412/using System.Collections.Generic;
    using System;class P
    {
        delegate string X(string name);
        static void Main()
        {
    var obj = new { Name = "crab",
        Age = 23,
     SayHello = (X)((string name) =>  string.Format( "Hello, {0}!", name ))
        };
            }
    }