2008-10-03 2 views
19

나는 각각 ID, 코드 및 설명을 포함하는 객체 목록을 가지고 있습니다.C#에서 List <object>을 Hashtable로 변환하려면 어떻게해야합니까?

나는 키로 설명 및 값으로 아이디를 사용하여 해시 테이블에이 목록을 변환해야합니다.

이렇게하면 Hashtable을 JSON에 직렬화 할 수 있습니다.

< 개체 >을 목록의 각 항목을 통과하는 루프를 작성하지 않고 Hashtable로 변환하는 방법이 있습니까?

답변

32

List에 Foo 유형의 객체 (int ID 및 string 설명 포함)가 있다고 가정 해 봅시다.

이 같은 사전에 그 목록을 설정하는 Linq를 사용할 수 있습니다 :

var dict = myList.Cast<Foo>().ToDictionary(o => o.Description, o => o.Id); 
+1

그 예가 자리에 있습니다. Linq는 왼쪽, 오른쪽 및 중앙의 문제를 계속 해결합니다. –

+0

좋은 물건! 이것은 프랭크 링크의 예제를 사용하여 방금 작성한 것과 거의 같습니다. 도와 주셔서 대단히 감사합니다. –

5

Linq에 액세스 할 수있는 경우 ToDictionary 기능을 사용할 수 있습니다.

+0

굉장! 이것은 내가 찾고 있었던 바로 그 것이다. 고마워요 :) –

1

theList.ForEach (대표 (theObject OBJ) {dic.Add (obj.Id, obj.Description을);});

+0

병렬 버전은 매우 위험합니다. 당신은 사전이 쓰레드에 안전하다고 가정하고있다. *는 * not *로 문서화되어있다. 이제 ToDictionary의 PFX 버전이있는 경우에는 다를 수 있습니다.하지만 .Add (...) - 위험한 - -p –

+1

정말 사실입니다! :) 항목에서 해당 구현을 제거했습니다. – noocyte

+0

아주 좋은 답변입니다. 이것은 회원 평가입니다. http://diditwith.net/2006/10/05/PerformanceOfForeachVsListForEach.aspx – anonymous

0

또한 System.Collections.ObjectModel.KeyedCollection < TKey, TItem>을 확인하십시오. 당신이하고 싶은 일에 더 잘 맞는 것 같습니다.