public bool CanBeReachedFrom(IType expectedType, IType actualType, bool considerExplicitConversionOperators, out bool byDowncast)
{
byDowncast = false;
return IsAssignableFrom(expectedType, actualType)
|| CanBeReachedByPromotion(expectedType, actualType)
|| FindImplicitConversionOperator(actualType, expectedType) != null
|| (considerExplicitConversionOperators && FindExplicitConversionOperator(actualType, expectedType) != null)
|| (byDowncast = DowncastPermissions().CanBeReachedByDowncast(expectedType, actualType));
}