c# - How to call a generic method using a type returned from a different method? -


i have 2 types person , organisation both inheriting icontact.

i have method returns 1 of these types based on logic

private type getpersonororganisation(string variable) {    either returns person or organisation type } 

i have method queries database persons or orgs:

public static iqueryable<t> query<t>(this iuow uow) t : icontact         {             return uow.query<t>();         } 

my question how can use type returned getpersonororganisation call query.

so say:

var contacttype = getpersonororganisation(string variable);   var contact = query<contacttype>(); 

where contacttype either person or organisation.

well won't compile , that's question. how make query on right type database based on returned getpersonororganisation.

moving between type , generics major pain; answer without refactoring is: reflection; like:

var method = typeof(sometype).getmethod("query").makegenericmethod(contacttype); // getch query<t>(this iuow) method  var contact = (icontact)method.invoke(null, new object[] { uow }); 

which pretty horrible. if possible, suggest rewriting query<t> method query(type type) method (returning icontact), still trivially allows generic query<t> helper method existing code, via return (t) query(typeof(t));. reverse not case, however.

if passing instance of type t into method, there tricks can simplfiy this, using dynamic perform type/generics/method resolution you.


Comments

Popular posts from this blog

get url and add instance to a model with prefilled foreign key :django admin -

css - Make div keyboard-scrollable in jQuery Mobile? -

ruby on rails - Seeing duplicate requests handled with Unicorn -