views:

88

answers:

1

This question is sort of a follow-up to my original question here.

Let's say that I have the following generic class (simplifying! ^_^):

class CasterClass<T> where T : class
{
    public CasterClass() { /* none */ }
    public T Cast(object obj)
    {
        return (obj as T);
    }
}

Which has the ability to cast an object into a specified type.

Unfortunately, at compile-time, I don't have the luxury of knowing what types exactly I'll have to work with, so I'll have to instantiate this class via reflection, like so:

Type t = typeof(castedObject);

// creating the reflected Caster object
object CasterObj = Activator.CreateInstance(
    typeof(CasterClass<>).MakeGenericType(t)
);

// creating a reflection of the CasterClass' Cast method
MethodInfo mi = typeof(CasterClass<>).GetMethod("Cast");

Problem is, once I call the method using mi.Invoke(), it will return an object typed output, instead of the specifically-typed T instance (because of reflection).

Is there any way to have a method invoked through reflection return a dynamic type, as illustrated above? I'm pretty sure that .NET 3.5 doesn't have the facilities to cast into a dynamic type (or rather, it would be very impractical).

Many thanks!

A: 

If you have control over the classes you'll be working with, have them all instantiate an interface that contains the methods you'll be calling and once you instantiate, cast to the interface.

I also posted an answer to your previous question with the same idea.

Mark Synowiec
Thanks Mark, that might just be it. I'll have to look into that a bit more though, but it makes perfect sense.
Richard Neil Ilagan