How to unbox a C# object to dynamic type
If you're using .NET 4 and C# 4, you can use dynamic
for this:
dynamic obj = GetObject();
SomeMethod(obj);
Otherwise, you'll have to use reflection to find and invoke the right method. Overload resolution (for non-dynamic
types) is performed at compile-time.
(Note that unless TypeA
and TypeB
are structs, you wouldn't be unboxing anyway...)
McGarnagle
If you have a Windows Phone, check out my (free) apps: "All My Circuits", a tracker for weightlifting workouts. "Penny Counter", a simple personal expense tracker.
Updated on June 05, 2022Comments
-
McGarnagle almost 2 years
I'm trying to do something like this:
void someMethod(TypeA object) { ... } void someMethod(TypeB object) { ... } object getObject() { if (...) return new TypeA(); else return new TypeB(); } object obj = getObject(); (obj.GetType()) obj; // won't compile someMethod(obj);
Obviously I'm confused here. I know I could make this work by just writing out a conditional statement --
if (obj.GetType() == typeof(TypeA)) obj = (TypeA)obj; else if (obj.GetType() == typeof(TypeB)) obj = (TypeB)obj;
-- but isn't there some way to do this at runtime?
EDIT I agree it seems like perhaps not the best design choice, so here's the context. The point of the above code is Repository base class for Mongo DB. I want it to be able to handle different kinds of tables. So, someMethod() is actually remove; and TypeA and TypeB are ObjectID and Guid; the code at the bottom is part of a type-agnostic remove method that accepts the ID as a string; and getObject() is a method to parse the ID parameter.