ここで、型が別の型から派生しているかどうかを確認するためのクールな方法を取得しました。コードをリファクタリングしているときに、このチャンクを取得しました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
を返しているのか誰かが解明できますか?
ボーナス:メソッドの適切な名前を提案してください:)