2013-02-19 67 views
1
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}”?LINQ在哪里超载Console.WriteLine()是IEnumerable的<T>结果

回答

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()方法pr以与初始化初始化格式相同的格式输入匿名类型 实例的值(当然,除了 实际值而不是表达式)。

2

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

1

这不是LINQ,这是C#编译器如何生成ToString匿名类型。