c# - Understanding this function that returns Type object -
i got cool method here check if type derived another. while refactoring code got chunk 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; } i'm having trouble understanding getblah , hence can't give proper name. mean can understand ternary expression such , getgenerictypedefinition function, dont seem use in isof method, parent argument being passed. can elucidate getblah method returning?
bonus: suggest me apt name method :)
generic types list<int> or list<string>. make use of same generic type definition: list<>.
isgenerictype return true type generic type. if type generic type definition isgenerictypedefinition should return true. function getgenerictypedefinition return generic type definition of generic type.
so, if do:
typeof(list<int>).getgenerictypedefinition(); you typeof(list<>).
so far theory!
if analyse code correctly, return true of child derived parent. made little checklist of type combination should return true (in opinion):
a: int, icomparable<int> b: int, valuetype c: int, object d: list<int>, ilist<int> e: list<int>, ienumerable<int> f: list<int>, object g: list<int>, list<> h: list<int>, ilist<> i: list<>, ilist<> j: list<>, object the given code fails @ 1 point: every time when parent of type object, false returned. resolved modifying while-condition into:
while (currentchild != null) now blah-function. check if parent generic type definition. no 'normal' class (generic or not) can derive generic type definition. generic type definition can derive generic type definition. in order let case g , h become true, special converion has done. if parent generic type definition , when child can converted generic type definition, child converted generic type defintion.
that does.
so perfect name function be: convertchildtogenerictypedefinitionifparentisagenerictypedefinitionandthechildisagenerictype(...)
:)
Comments
Post a Comment