none
关于匿名类型 RRS feed

  • 问题

  •  class Person
        {
            public string Name { set; get; }
            public string Age{set;get;}
        }
        class Program
        {
            static void Main(string[] args)
            {
                var p1 = new { Name="Jack",Age="16" };
                var p2 = new Person { Name = "May", Age = "20" };
            }
        }

    请问下,p1,p2有什么区别?两者不能互相赋值。

    另外p2那段也可以写成 Person p2=new Person { Name = "May", Age = "20" };
    这两种写法有区别么?

    2011年2月28日 2:46

答案

  • 您好,

    第一个问题,关于

    var p1 = new { Name="Jack",Age="16" };
    var p2 = new Person { Name = "May", Age = "20" };
    的不同,您可以尝试输出一下  p1与p2的 Type是不一样的,p1是动态的,p2是指定性的。

    var p2 = new Person { Name = "May", Age = "20" };
    Person p2=new Person { Name = "May", Age = "20" };
    的不同是,存储方式不同,一个是动态点,一个是指定性点。

    • 已标记为答案 ogra 2011年2月28日 4:08
    2011年2月28日 2:57
  • 补充Super Zhang
    这个时候的P1你可以看作是 class XXXX{Name="Jack",Age="16"}
    而这个时候的P2是你定义的 class Person { Name = "May", Age = "20" };

    也就是说,P1,P2是两个不同了性的对象。他们的类名是不一样的。
    只不过两个对象里属性的名字和值是一样的而已。但这并不代表任何意义。


    信奎爷,无所畏惧!!
    • 已建议为答案 Charles Shao 2011年2月28日 3:32
    • 已标记为答案 ogra 2011年2月28日 4:08
    2011年2月28日 3:32
  • 两者runtime的性能没有任何差别。 但是开发和维护成本有很大的差别

    声明一个固定的类,开发成本高, 但是维护和扩展成本较低。 适用于产品型的开发。

    匿名结果, 开发成本非常低,但是维护的工作量和风险较高。适用于一次性的项目开发。


    信奎爷,无所畏惧!!
    • 已建议为答案 Charles Shao 2011年2月28日 3:35
    • 已标记为答案 ogra 2011年2月28日 4:08
    2011年2月28日 3:35

全部回复

  • 您好,

    第一个问题,关于

    var p1 = new { Name="Jack",Age="16" };
    var p2 = new Person { Name = "May", Age = "20" };
    的不同,您可以尝试输出一下  p1与p2的 Type是不一样的,p1是动态的,p2是指定性的。

    var p2 = new Person { Name = "May", Age = "20" };
    Person p2=new Person { Name = "May", Age = "20" };
    的不同是,存储方式不同,一个是动态点,一个是指定性点。

    • 已标记为答案 ogra 2011年2月28日 4:08
    2011年2月28日 2:57
  • 明白了。但上面那两组各有两种写法,他们的性能是一样的么?什么时候用哪种方法比较合适?
    2011年2月28日 3:31
  • 补充Super Zhang
    这个时候的P1你可以看作是 class XXXX{Name="Jack",Age="16"}
    而这个时候的P2是你定义的 class Person { Name = "May", Age = "20" };

    也就是说,P1,P2是两个不同了性的对象。他们的类名是不一样的。
    只不过两个对象里属性的名字和值是一样的而已。但这并不代表任何意义。


    信奎爷,无所畏惧!!
    • 已建议为答案 Charles Shao 2011年2月28日 3:32
    • 已标记为答案 ogra 2011年2月28日 4:08
    2011年2月28日 3:32
  • 两者runtime的性能没有任何差别。 但是开发和维护成本有很大的差别

    声明一个固定的类,开发成本高, 但是维护和扩展成本较低。 适用于产品型的开发。

    匿名结果, 开发成本非常低,但是维护的工作量和风险较高。适用于一次性的项目开发。


    信奎爷,无所畏惧!!
    • 已建议为答案 Charles Shao 2011年2月28日 3:35
    • 已标记为答案 ogra 2011年2月28日 4:08
    2011年2月28日 3:35