■ IEnumerable<T> 객체에서 특정 속성을 키 값으로 딕셔너리를 구하는 방법을 보여준다.
▶ IEnumerable
1 2 3 4 5 6 7 8 9 10 11 12 13 |
객체에서 특정 속성을 키 값으로 딕셔너리 구하기 예제 (C#)">using System; using System.Collections.Generic; List<Product> sourceList = GetProductList(100); Dictionary<string, Product> targetDictionary = GetDictionary<string, Product>(sourceList, "ProductName"); foreach(KeyValuePair<string, Product> keyValuePair in targetDictionary) { Console.WriteLine(keyValuePair.Key); } |
※ Product 클래스에 string 타입의 ProductName 속성을 가정했다.
▶ IEnumerable
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
객체에서 특정 속성을 키 값으로 딕셔너리 구하기 (C#)">using System.ComponentModel; using System.Collections.Generic; #region 딕셔너리 구하기 - GetDictionary(source) /// <summary> /// 딕셔너리 구하기 /// </summary> /// <param name="source">소스</param> /// <returns>딕셔너리</returns> public static Dictionary<TValue, TItem> GetDictionary<TValue, TItem>(IEnumerable<TItem> source, string valueMember) { if(source == null) { return null; } if(string.IsNullOrWhiteSpace(valueMember)) { return null; } bool isFirst = true; PropertyDescriptorCollection propertyDescriptorCollection = null; PropertyDescriptor valuePropertyDescriptor = null; Dictionary<TValue, TItem> itemDictionary = new Dictionary<TValue, TItem>(); foreach(TItem item in source) { if(isFirst) { isFirst = false; propertyDescriptorCollection = TypeDescriptor.GetProperties(item); valuePropertyDescriptor = propertyDescriptorCollection[valueMember]; if(valuePropertyDescriptor == null) { return null; } } TValue value = (TValue)valuePropertyDescriptor.GetValue(item); if(!itemDictionary.ContainsKey(value)) { itemDictionary.Add(value, item); } } return itemDictionary; } #endregion |