LINQ在哪里为它的IEnumerable <t>结果</t>重载Console.WriteLine()

时间:2013-02-19 09:04:00

标签: c# .net linq

var products1 = new List<Product> {
     new Product { Name = "Apple", Price = 2 }};

var products2 = from product in products1
      select new { product.Name, product.Price };

foreach (var p in products1) 
      Console.WriteLine(p);

foreach (var p in products2)
      Console.WriteLine(p);

为什么第二个打印“{Name = Apple,Price = 2}”?

3 个答案:

答案 0 :(得分:3)

  

为什么第二个打印“{Name = Apple,Price = 2}”?

由于您使用new关键字创建了匿名类型,因此与Product类型不同。

由于您致电Console.WriteLine(p);,相当于:

Console.WriteLine(p.ToString());

您可能会看到:C#/.NET Little Wonders: The Joy of Anonymous Types

  

匿名类型的ToString()

     

匿名类型为您提供的一个更简单的覆盖   是一个ToString()方法,打印匿名类型的值   实例的格式与初始化的格式大致相同(除了   当然,实际值而不是表达式。

答案 1 :(得分:2)

您正在创建一个实现自己的ToString方法的匿名类型。

答案 2 :(得分:1)

这不是LINQ,而是C#编译器为匿名类型生成ToString的方式。