As of C# 7.0, you can use the is keyword to do this :
With those class defined :
class Base { /* Define base class */ }
class Derived : Base { /* Define derived class */ }
You can then do somehting like :
void Funtion(Base b)
{
if (b is Derived d)
{
/* Do something with d which is now a variable of type Derived */
}
}
Which would be equivalent to :
void Funtion(Base b)
{
Defined d;
if (b is Derived)
{
d = (Defined)b;
/* Do something with d */
}
}
You could now call :
Function(new Derived()); // Will execute code defined in if
As well as
Function(new Base()); // Won't execute code defined in if
That way you can be sure that your downcast will be valid and won't throw an exception !