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

▶ 제네릭 인터페이스 타입 여부 구하기 예제

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;

Type sourceType                 = typeof(ObservableCollection<int>);
Type targetGenericInterfaceType = typeof(IList<>);

Console.WriteLine(IsGenericInterfaceType(sourceType, targetGenericInterfaceType));

 

728x90

 

▶ 제네릭 인터페이스 타입 여부 구하기

using System;
using System.Reflection;

#region 제네릭 인터페이스 타입 여부 구하기 - IsGenericInterfaceType(sourceType, filterCriteria)

/// <summary>
/// 제네릭 인터페이스 타입 여부 구하기
/// </summary>
/// <param name="sourceType">소스 타입</param>
/// <param name="filterCriteria">필터 기준</param>
/// <returns>제네릭 인터페이스 타입 여부</returns>
public bool IsGenericInterfaceType(Type sourceType, object filterCriteria)
{
    Type targetGenericInterfaceType = (Type)filterCriteria;

    return sourceType.IsGenericType && sourceType.GetGenericTypeDefinition() == targetGenericInterfaceType;
}

#endregion
#region 제네릭 인터페이스 타입 여부 구하기 - IsGenericInterfaceType(sourceType, targetGenericInterfaceType)

/// <summary>
/// 제네릭 인터페이스 타입 여부 구하기
/// </summary>
/// <param name="sourceType">소스 타입</param>
/// <param name="targetGenericInterfaceType">타겟 제네릭 인터페이스 타입</param>
/// <returns>제네릭 인터페이스 타입 여부</returns>
public bool IsGenericInterfaceType(Type sourceType, Type targetGenericInterfaceType)
{
    if(sourceType.IsGenericType && sourceType.GetGenericTypeDefinition() == targetGenericInterfaceType)
    {
        return true;
    }
    else
    {
        TypeFilter typeFilter = new TypeFilter(IsGenericInterfaceType);

        Type[] interfaceTypeArray = sourceType.FindInterfaces(typeFilter, targetGenericInterfaceType);

        if(interfaceTypeArray == null || interfaceTypeArray.Length == 0)
        {
            return false;
        }
        else
        {
            return true;
        }
    }
}

#endregion
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요