1

ここで、型が別の型から派生しているかどうかを確認するためのクールな方法を取得しました。コードをリファクタリングしているときに、このチャンクを取得しましたGetBlah

public static bool IsOf(this Type child, Type parent)
{
    var currentChild = child.GetBlah(parent);

    while (currentChild != typeof(object))
    {
        if (parent == currentChild)
            return true;

        if(currentChild.GetInterfaces().Any(i => i.GetBlah(parent) == parent))
            return true;

        if (currentChild.BaseType == null)
            return false;

        currentChild = currentChild.BaseType.GetBlah(parent);
    }

    return false;
}

static Type GetBlah(this Type child, Type parent)
{
    return child.IsGenericType && parent.IsGenericTypeDefinition 
         ? child.GetGenericTypeDefinition() 
         : child;
}

何が機能するのか理解に苦しむGetBlahので、適切な名前を付けることができません。つまり、三項式はそのままでGetGenericTypeDefinition機能することは理解できますが、IsOfメソッド、特にparent渡される引数でそれを使用できないようです。メソッドが実際に何GetBlahを返しているのか誰かが解明できますか?

ボーナス:メソッドの適切な名前を提案してください:)

4

1 に答える 1