Variables condicionales

Me estoy perdiendo algo, ¿cómo hago que esto funcione?

var now = DateTime.Now;
string loadStartDate = Request.QueryString["sd"] == String.Empty ? now.AddMonths( -14 ).ToShortDateString();
string loadEndDate = Request.QueryString[ "ed" ] == String.Empty ? now.ToShortDateString();

Básicamente, cuando la página se carga si sd y/o ed están en blanco, luego complete la fecha con mis cosas predefinidas.

preguntado el 03 de mayo de 12 a las 16:05

3 Respuestas

estas olvidando un : y la parte posterior.

El operador condicional tiene tres partes:

  • predicado (Request.QueryString["sd"] == String.Empty)
  • rama verdadera
  • rama falsa

Te falta la sintaxis y el valor de la rama falsa.

Lo escribiría como:

string loadStartDate = string.IsNullOrWhitespace(Request.QueryString["sd"])
                       ? now.AddMonths( -14 ).ToShortDateString()
                       : Request.QueryString["sd"];

Nota:

string.IsNullOrWhitespace es nuevo en .NET 4.0, así que use string.IsNullOrEmpty para versiones anteriores.

contestado el 03 de mayo de 12 a las 16:05

Sí; y Request.QueryString[] regresará null (más bien que String.Empty) si no se presentó ningún valor. - Andrew barbero

@p.campbell: de hecho ... aunque si se necesita una cadena, no es necesario hacer un viaje de ida y vuelta. Perdí eso. - Oded

¡Gracias por esto! Me preguntaba qué me estaba perdiendo. Gracias por la explicación a través de. :) - James Wilson

¿Me estoy perdiendo una declaración de uso en la parte superior? Está diciendo que 'cadena' no contiene una definición para 'IsNullOrWhitespace' - James Wilson

@JamesWilson: agregué una nota sobre eso ... Es una adición de .NET 4.0. Usar string.IsNullOrEmpty en cambio, si aún no está en 4.0. - Oded

Debería ser como:

string loadStartDate = Request.QueryString["sd"] == String.Empty ? now.AddMonths
( -14 ).ToShortDateString():SOME OTHER VALUE;

contestado el 03 de mayo de 12 a las 16:05

La sintaxis del operador condicional es:

condition ? truevalue : falsevalue

Le faltan los dos puntos y el valor para cuando la condición es falsa.

podemos use el operador condicional para esto, pero luego se vuelve un poco repetitivo. Solo haz esto:

DateTime now = DateTime.Now;
string loadStartDate = Request.QueryString["sd"];
if (String.IsNullOrEmpty(loadStartDate)) loadStartDate = now.AddMonths(-14).ToShortDateString();
string loadEndDate = Request.QueryString[ "ed" ];
if (String.IsNullOrEmpty(loadEndDate)) loadEndDate = now.ToShortDateString();

contestado el 03 de mayo de 12 a las 16:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.