2011-09-27 5 views
5

난 제품문자열을 IEnumerable <T> 변환 []

class Product 
{ 
    public Id { get; set; } 
    public Name { get; set; } 
} 

라는 엔티티를하고 난 모든 제품의 목록이 있습니다

IEnumerable<Product> products = _productRepository.GetAll() 

내가이 목록에서 문자열 배열을하고 싶지을 이 배열에는 제품 ID + 제품 이름이 포함되어 있으므로 다음 코드를 사용하여 캐스팅하려고 시도합니다.

string[] s = products.Cast<string>().ToArray(); 
Unable to cast object of type 'Product' to type 'System.String' 

예외가 정말로에서 scence FO 많이 난 그래서 제품 객체에 대한 방법

string ProductToString(Product p) 
{ 
    return p.Name; 
} 

또는 ToString을 재정의()를 가지고, 그래서 만약 내가 어떻게 할 수있는, 수 : 14,나는 다음과 같은 예외가 있어요 이 메소드를 사용하여 IEnumerable에서 string [] 목록을 가져 오겠습니까? 방법은 1를 사용할 수있는 주어진

string[] s = products.Select(p => p.Id + ' ' + p.Name).ToArray(); 

답변

20

음 : 당신이 아이디 + 이름이 필요한 경우

+0

는'은'거기에 물론 당신은 CarstenKönig @ – Carsten

+0

...., 30 초 나를 이길 : 그것은 * * 버전에 따라 달라질 수 있습니다 당신이 사용하고있는 컴파일러의. v4 컴파일러 인 IIRC에는 미묘한 변화가있었습니다. 나는 당신이 논평 할 당시의 주위에 그것에 관하여 주를 추가하고 있었다 :) –

2
string[] s = products.Select(p => p.Name).ToArray(); 

또는

string[] s = products.Select<string>(ProductToString).ToArray(); 

을하지만, 더 관용적 것 이 경우 없이 별도의 방법으로 대개 람다 식을 사용하십시오.

// Matches ProductToString, but not your description 
string[] s = products.Select(p => p.Name).ToArray(); 

여러 위치에서 호출 될 경우 (일관성 보장) 많은 작업을 수행 할 경우에만 별도의 방법을 사용합니다.

편집 : 설명 (ID + 이름 입력)이 실제로 입력 한 ProductToString 방법 (이름 만 제공)과 일치하지 않는 것으로 나타났습니다. 는 ID + 이름에 대해 내가 사용하는 것 :

string[] s = products.Select(p => p.ID + " " + p.Name).ToArray(); 

또는

string[] s = products.Select(p => string.Format("{0} {1}", p.ID, p.Name)) 
        .ToArray(); 

아니면 그냥 물론, ProductToString 방법을 변경할 수 있습니다. 이 당신이 stringProduct를 변환하는 방법을 일반적으로 경우

다른 방법으로는, ProductToString()를 오버라이드 (override) 할 수있다. 그런 다음 메서드 그룹 변환 또는 람다 식을 사용하여 ToString을 호출 할 수 있습니다.


1 그것은 당신이 명시 적으로 형식 인수를 지정하지 않아도 가능 -이 :

string[] s = products.Select(ProductToString).ToArray(); 

가 잘 작동합니다 - 항상 타입 추론 및 방법 그룹 변환에 대한 규칙을 저를 혼동 컴파일러 동작은 시간이 지남에 따라 약간 변경되었습니다. 빠른 테스트는 이제 막 처럼 보이지만 약간 희미한 다른 상황에서 미묘한 부분이있을 수 있습니다.

1

사용 당신이 아래로 작성하지 않아도 이럴

string[] s = (from p in products select p.Id.ToString() + " " + p.Name.ToString()).ToArray();