C #?: Operador Condicional

Tengo este extracto de código fuente de C # 2.0:

object valueFromDatabase;
decimal result;
valueFromDatabase = DBNull.Value;

result = (decimal)(valueFromDatabase != DBNull.Value ? valueFromDatabase : 0);
result = (valueFromDatabase != DBNull.Value ? (decimal)valueFromDatabase : (decimal)0);

La primera evaluación de resultados arroja unInvalidCastException mientras que el segundo no lo hace. ¿Cuál es la diferencia entre estos dos?

Respuestas a la pregunta(8)

Su respuesta a la pregunta