var dict = new Dictionary<string, object>();
DateTime? myDate;
/*Next line gives: Type of conditional expression cannot be
determined because there is no implicit conversion between 'System.DateTime?'
and 'System.DBNull' */
dict.Add("breakit", myDate.HasValue ? myDate.Value : DBNull.Value);
No entiendo por qué tiene que haber una conversión implícita si uno u otro van a un diccionario esperando el tipo Objeto.¿Por qué no puedo usar un operador ternario con esta expresión?
Este es un extremadamente pregunta frecuente en el SO. Ver http://stackoverflow.com/questions/2215745/conditional-operator-cannot-cast-implicitly/2215959#2215959 para más detalles. Véase también mi artículo relacionado http://blogs.msdn.com/b/ericlippert/archive/2010/05/27/cast-operators-do-not-obey-the-distributive-law.aspx –
@Eric voy Echale un vistazo. ¡Gracias! – scottm
De nada. El problema es que estás razonando en la dirección opuesta a la que explica el compilador. Usted está diciendo "Sé que esto va a algo que espera un objeto". Pero el compilador no sabe que * a priori * desea que se elija el método del "objeto". El compilador está tratando de razonar de otra manera. Se está preguntando "¿es el método que espera que el objeto sea compatible con esta expresión?" Para saber que debe preguntar "¿Cuál es el tipo de expresión?" ** El problema es que no puede funcionar el tipo de expresión para decidir si la expresión funciona. ** –