c# 4.0 - Type parameters - get concrete type from type T : IMyInterface -
suppose have list<imyinterface>...
i have 3 classes implement imyinterface: myclass1, myclass2, , myclass3
i have readonly dictionary:
private static readonly dictionary<type, type> declarationtypes = new dictionary<type, type> { { typeof(myclass1), typeof(funnyclass1) }, { typeof(myclass2), typeof(funnyclass2) }, { typeof(myclass3), typeof(funnyclass3) }, }; i have interface, ifunnyinteface<t> t : imyinterface
i have method:
public static ifunnyinterface<t> converttofunnyclass<t>(this t node) t : imyinterface { if (declarationtypes.containskey(node.gettype())) { ifunnyinterface<t> otherclassinstance = (funnyinterface<t>) activator.createinstance(declarationtypes[node.gettype()], node); return otherclassinstance; } return null; } i'm trying call constructor of funnyclasses , insert parameter myclass object. don't want know object is: want instantiate funnyclass myclass parameter.
what happens when call converttofunnyclass, t of type imyinterface, , when try cast funnyinterface<t>, says can't convert funnyclass1, instance, funnyinterface<imyinterface>
my current workaround (not beautiful one), this:
public static dynamic converttofunnyclass<t>(this t node) t : imyinterface { if (declarationtypes.containskey(node.gettype())) { var otherclassinstance = (funnyinterface<t>) activator.createinstance(declarationtypes[node.gettype()], node); return otherclassinstance; } return null; } and don't because return type dynamic, when access somewhere else, have no idea type is, , lose intellisense, , stuff. don't know performance implications either.
any clues?
thanks in advance!
resolution
as i'm using c# 4.0, stop casting errors using covariance (output positions only), , changed ifunnyinterface to
ifunnyinteface<out t> t : imyinterface thank replies.
essentially, problem trying convert funnyinterface<t> funnyinterface<imyinterface>. has been mentioned several times (one example here, more information here), not valid in circumstances. in .net 4, when generic type interface or delegate, , type parameter has been explicitly declared variant in or out, can perform conversion.
is funnyinterface interface?
Comments
Post a Comment