첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
728x90
반응형
728x170

▶ IEnumerable<T> 객체에서 특정 속성을 키 값으로 딕셔너리 구하기 예제

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 속성을 가정했다.

 

728x90

 

▶ IEnumerable<T> 객체에서 특정 속성을 키 값으로 딕셔너리 구하기

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
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요