tengo una variable DateTime?
, a veces el valor es null
, ¿Cómo puedo devolver una cadena vacía ""
cuando el valor es null
o el valor DateTime
cuando no null
?C# anulable <DateTime> a cadena
Respuesta
string date = myVariable.HasValue ? myVariable.Value.ToString() : string.Empty;
DateTime? MyNullableDT;
....
if (MyNullableDT.HasValue)
{
return MyNullableDT.Value.ToString();
}
return "";
DateTime? d;
// stuff manipulating d;
return d != null ? d.Value.ToString() : String.Empty;
if (aDate.HasValue)
return aDate;
else
return string.Empty;
DateTime d?;
string s = d.HasValue ? d.ToString() : string.Empty;
Se puede escribir un método de extensión
public static string ToStringSafe(this DateTime? t) {
return t.HasValue ? t.Value.ToString() : String.Empty;
}
...
var str = myVariable.ToStringSafe();
En realidad, este es el comportamiento por defecto para los tipos anulables, que sin un valor que retornan nada :
public class Test {
public static void Main() {
System.DateTime? dt = null;
System.Console.WriteLine("<{0}>", dt.ToString());
dt = System.DateTime.Now;
System.Console.WriteLine("<{0}>", dt.ToString());
}
}
esto produce
<>
<2009-09-18 19:16:09>
+1 No sabía esto. Sin embargo, no puede suministrar una cadena de formateo de esta manera. –
Hm, a la derecha. Aunque esto puede no ser un problema en este caso. Aunque yo no sabía esto yo mismo hasta ayer. Tropecé con eso al mirar 'Nullable
Aunque muchas de estas respuestas son correctas, todos ellos son innecesariamente compleja. El resultado de llamar a ToString en un DateTime anulable ya es una cadena vacía si el valor es lógicamente nulo. Simplemente llame a ToString en su valor; Hará exactamente lo que quieras.
A menos que quieras usar las propiedades de DateTime como '.Day'' .Week' porque eso te dará la cadena completa de DateTime y perderá el poder de la clase DateTime . p.ej. 'myVariable.Value.Hour.ToString() '. Solo un ejemplo de por qué es posible que desee hacer lo contrario. – baron
@baron, esas propiedades no son 'Nullable'. – Sam
Llamar a .ToString()
en un Nullable<T>
que es null
devolverá una cadena vacía.
Todo lo que necesita hacer es simplemente llamar al .ToString()
. Maneja el objeto Nullable<T>
para el valor null
.
Aquí es el source of .NET Framework para Nullable<T>.ToString()
:
public override string ToString() {
return hasValue ? value.ToString() : "";
}
- 1. C error # cadena anulable
- 2. LINQ a SQL IN/Contiene() para anulable <T>
- 3. ? (anulable) operador en C#
- 4. cadena Convertir a DateTime variable de anulable en una línea
- 5. Cómo decodificar cadena a cadena XML en C#
- 6. anulable método en el C#
- 7. anulable Enum tipo anulable pregunta
- 8. moldeada bool anulable a bool
- 9. C# IEnumerable <Object> a la cadena
- 10. ICollection <string> a la cadena []
- 11. Convierta una cadena delimitada a un diccionario <cadena, cadena> en C#
- 12. C# Enums: valor anulable o 'desconocido'?
- 13. números de serie a un anulable <DateTime> a XML
- 14. anulable Ronda decimal a 5 decimales
- 15. Buscando un alterantive a la lista <KeyValuePair <cadena, KeyValuePair <cadena, cadena >>>
- 16. ToString anulable()
- 17. cadena Parse en tipo numérico anulable (1 o 2 liner)
- 18. Convertir <String> a cadena delimitada
- 19. IEnumerable <string> a cadena
- 20. ¿Lanzar objeto a decimal? (Decimal anulable)
- 21. anulable DateTime conversión
- 22. cómo convertir Diccionario <dinámico, dinámico> a Diccionario <cadena, cadena> usando Colllection.ToDictionary()
- 23. Entity Framework no anulable se asigna a una anulable propiedad de entidad
- 24. Cómo convertir una cadena a un tipo anulable que se determina en tiempo de ejecución?
- 25. fecha anulable en Freemarker
- 26. convirtiendo cadena de estilo c a cadena de estilo C++
- 27. Fecha para Cadena <-> Cadena Fecha
- 28. C++: Funciones de cadena sin <cstring>
- 29. Estructura anulable vs clase
- 30. Índice de columna anulable
Gracias, exactamente lo que estaba buscando –
Qué !? Puede llamar a .ToString() en la instancia Nullable para obtener String.Empty. Incluso Eric Lippert (que incluso podría haber implementado este comportamiento) lo nota. _That_ debería ser la respuesta aceptada. –
codekaizen
@codekaizen - Obtengo una excepción cuando intento eso. Entonces no, esa no sería la respuesta aceptada. Quizás esto no sea un problema en las versiones más recientes de C# o .net? –