2013-02-19 45 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匿名類型。