Ho una variabile DateTime?
, a volte il valore è null
, come posso restituire una stringa vuota ""
quando il valore è null
o il DateTime
valore quando non null
?C# Nullable <DateTime> a stringa
risposta
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;
Si potrebbe scrivere un metodo di estensione
public static string ToStringSafe(this DateTime? t) {
return t.HasValue ? t.Value.ToString() : String.Empty;
}
...
var str = myVariable.ToStringSafe();
In realtà, questo è il comportamento predefinito per i tipi Nullable, che senza un valore che restituiscono nulla :
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());
}
}
questo produce
<>
<2009-09-18 19:16:09>
+1 Non lo sapevo. Tuttavia, non è possibile fornire una stringa di formattazione in questo modo. –
Hm, giusto. Anche se questo potrebbe non essere un problema in questo caso. Non lo sapevo neanche io fino a ieri, però. Inciampandoci sopra guardando 'Nullable
Anche se molte di queste risposte sono corrette, tutti sono inutilmente complesse. Il risultato di chiamare ToString su un valore DateTime nullable è già una stringa vuota se il valore è logicamente nullo. Basta chiamare ToString sul valore; farà esattamente quello che vuoi.
A meno che tu non voglia usare le proprietà DateTime come '.Day'' .Week' perché questo ti darà l'intera stringa DateTime e perderà la potenza della classe DateTime . per esempio. 'MyVariable.Value.Hour.ToString() '. Solo un esempio per cui potresti voler fare diversamente. – baron
@baron, quelle proprietà non sono 'Nullable'. – Sam
Calling .ToString()
su un Nullable<T>
che è null
restituirà una stringa vuota.
Tutto ciò che devi fare è semplicemente chiamare .ToString()
. Gestisce l'oggetto Nullable<T>
per il valore null
.
Ecco la source of .NET Framework per Nullable<T>.ToString()
:
public override string ToString() {
return hasValue ? value.ToString() : "";
}
- 1. C# IEnumerable <Object> a stringa
- 2. Come serializzare Nullable <bool>?
- 3. Func Nullable <T, TResult>
- 4. Perché provare a utilizzare la stringa? (Stringa Nullable) in C# produce un errore di sintassi?
- 5. Valori Nullable in C++
- 6. ? (nullable) operatore in C#
- 7. Data a stringa <-> Stringa data
- 8. Imposta proprietà Nullable <> per riflessione
- 9. Che cos'è `Nullable <T>?`?
- 10. come rendere il tipo di stringa nullable
- 11. C# Lista <string> a stringa con delimitatore
- 12. Trasmissione a enumerazione nullable
- 13. C# casting al tipo nullable?
- 14. C# Riflessione: Come ottenere il tipo di un Nullable <int>?
- 15. Conversione da stringa a <T>
- 16. Come ottenere il tipo di Nullable <Enum>?
- 17. TryParse a un tipo nullable
- 18. Creazione dell'IEnumerable <KeyValuePair <stringa, stringa >> Oggetti con C#?
- 19. IEnumerable <string> a stringa
- 20. Passare la stringa C# a C++ e passare il risultato C++ (stringa, char * .. qualunque) a C#
- 21. Gotchas quando si utilizza Nullable <T> in C# 4
- 22. Perché non T.TryParse restituisce un Nullable <T>
- 23. Pratiche di codifica per C# Tipo Nullable
- 24. Perché GetType() restituendo tipo DateTime per Nullable <DateTime>
- 25. DisplayFormat non funziona con Nullable <DateTime>
- 26. Wrap T in Nullable <T> via Reflection
- 27. L'operatore + = con i tipi nullable in C#
- 28. C# usando LINQ e Nullable Boolean
- 29. Perché nullable KeyValuePair <,> non ha alcuna proprietà chiave?
- 30. LINQ to SQL IN/Contiene() per Nullable <T>
Grazie, esattamente quello che stavo cercando –
Cosa !? Puoi semplicemente chiamare .ToString() nell'istanza Nullable per ottenere String.Empty. Anche Eric Lippert (che potrebbe aver persino implementato questo comportamento) lo nota. _Quale_ dovrebbe essere la risposta accettata. –
codekaizen
@codekaizen - Ricevo un'eccezione quando provo a farlo. Quindi no, non sarebbe la risposta accettata. Forse questo non è un problema nelle versioni più recenti di C# o .net? –