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 }”?

4

3 回答 3

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

于 2013-02-19T09:06:25.933 回答
2

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

于 2013-02-19T09:06:25.137 回答
1

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

于 2013-02-19T09:06:37.910 回答