How to cast Object to its actual type?

Paul Lassiter picture Paul Lassiter · Sep 2, 2012 · Viewed 327.2k times · Source

If I have:

void MyMethod(Object obj) {   ...   }

How can I cast obj to what its actual type is?

Answer

Marc Gravell picture Marc Gravell · Sep 2, 2012

If you know the actual type, then just:

SomeType typed = (SomeType)obj;
typed.MyFunction();

If you don't know the actual type, then: not really, no. You would have to instead use one of:

  • reflection
  • implementing a well-known interface
  • dynamic

For example:

// reflection
obj.GetType().GetMethod("MyFunction").Invoke(obj, null);

// interface
IFoo foo = (IFoo)obj; // where SomeType : IFoo and IFoo declares MyFunction
foo.MyFunction();

// dynamic
dynamic d = obj;
d.MyFunction();