2013-02-19 2 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); 

왜 두 번째 인쇄 "{이름 = 애플, 가격 = 2}"는 IEnumerable의에 대한 LINQ 과부하 Console.WriteLine을()를합니까?어디는 ​​<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()을 익명의 유형에 더 사소한 재정의

하나 그 익명 형식을 제공하면 은 pr 인 ToString() 메서드입니다. 익명 유형 인스턴스의 값은 초기화 된 것과 동일한 형식으로 (물론 적절한 표현식 대신 실제 값 제외).

2

자신의 ToString 메서드를 구현하는 익명 형식을 만듭니다.

1

이것은 LINQ가 아니기 때문에 C# 컴파일러가 익명 ​​형식에 대해 ToString을 생성하는 방법입니다.