Casting can be used on any compatible types, it can be overloaded, and it will throw an exception if the operation fails. The choice of which to use depends on the circumstances. In c# can i cast a variable of type object to a variable of type t where t is defined in a type variable?