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

----------------------------------------------------------------------------------------------------

using System;

using System.Collections.Generic;

using System.Collections.ObjectModel;

 

Type sourceType                 = typeof(ObservableCollection<int>);

Type targetGenericInterfaceType = typeof(IList<>);

 

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

----------------------------------------------------------------------------------------------------

 

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

----------------------------------------------------------------------------------------------------

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

----------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker

댓글을 달아 주세요