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() : "";
}
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? –