c# - How to find out if a type implements generics base class -


using example below... how can find out whether property of type implementing generics class foo?

public class foo<tbaz> {  }  public class bar {     public foo<int> fooint { get; set; }     public foo<string> foostring { get; set; }     public double someother { get; set; }      public int getfoocount()     {         return typeof(bar).getproperties().where(p => p.gettype().isgenerictype).count();     } } 

if wanted find foo<int>, easy, how can find out if contains foo<int>, foo<double> etc...?

i have written bit of getfoocount() have far...

thanks

return typeof(bar).getproperties().where(p => p.propertytype.isgenerictype     && p.propertytype.getgenerictypedefinition() == typeof(foo<>)).count(); 

note: won't automatically work class nongenericsubtype : foo<blah> {...}, nor work class genericsubtype<t> : foo<t> {...} - if need handle those, gets more fun.

for more general case, need uses recursion on type:

public static int getfoocount() {     return typeof(bar).getproperties()         .count(p => getfootype(p.propertytype) != null); }  private static type getfootype(type type) {     while(type != null)     {         if (type.isgenerictype &&             type.getgenerictypedefinition() == typeof(foo<>))                 return type.getgenericarguments()[0];         type = type.basetype;     }     return null; } 

note answers "now how find t?"


Comments

Popular posts from this blog

javascript - Jquery show_hide, what to add in order to make the page scroll to the bottom of the hidden field once button is clicked -

javascript - Highcharts multi-color line -

javascript - Enter key does not work in search box -