C++ делает много автоматического кастинга для Вас - то есть, если Вы будете иметь переменную типа bool
и передадите его чему-то, ожидая int
, он превратит его в int
для Вас - 0
для false
и 1
для true
.
у меня нет своего стандарта вокруг, чтобы видеть, гарантируется ли это, но каждый компилятор, который я использовал, делает это (таким образом, можно предположить, что это будет всегда работать).
Однако доверие этому преобразованию является плохой идеей. Код может прекратить компилировать, если новый метод добавляется что перегрузки int
подпись, и т.д.
string date = myVariable.HasValue ? myVariable.Value.ToString() : string.Empty;
Вызов .ToString ()
для Nullable
, то есть null
, вернет пустую строку.
DateTime? d;
// stuff manipulating d;
return d != null ? d.Value.ToString() : String.Empty;
DateTime d?;
string s = d.HasValue ? d.ToString() : string.Empty;
DateTime? MyNullableDT;
....
if (MyNullableDT.HasValue)
{
return MyNullableDT.Value.ToString();
}
return "";
if (aDate.HasValue)
return aDate;
else
return string.Empty;
Вы можете написать метод расширения
public static string ToStringSafe(this DateTime? t) {
return t.HasValue ? t.Value.ToString() : String.Empty;
}
...
var str = myVariable.ToStringSafe();
Фактически, это поведение по умолчанию для типов, допускающих значение NULL, что без значения они ничего не возвращают:
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());
}
}
это дает
<>
<2009-09-18 19:16:09>
Хотя многие из этих ответов верны, все они излишне сложны. Результатом вызова ToString для объекта DateTime, допускающего значение NULL, уже является пустая строка, если значение логически равно NULL. Просто вызовите ToString для своего значения; он сделает именно то, что вы хотите.