コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【C#】継承しているすべての基底クラスと実装しているすべてのインターフェイスの Type を返す拡張メソッド

概要

/// <summary>
/// 継承しているすべての基底クラスと実装しているすべてのインターフェイスの Type を返します
/// </summary>
public static IEnumerable<Type> GetParentTypes( this Type self )
{
    if ( self == null ) yield break;

    foreach ( var x in self.GetInterfaces() )
    {
        yield return x;
    }

    var currentBaseType = self.BaseType;

    while ( currentBaseType != null )
    {
        yield return currentBaseType;
        currentBaseType = currentBaseType.BaseType;
    }
}

使用例

foreach ( var parentType in typeof( List<int> ).GetParentTypes() )
{
    Debug.Log( parentType );
}

参考サイト様