C# Nullable <Дата и время> для строкового представления

C++ делает много автоматического кастинга для Вас - то есть, если Вы будете иметь переменную типа bool и передадите его чему-то, ожидая int, он превратит его в int для Вас - 0 для false и 1 для true.

у меня нет своего стандарта вокруг, чтобы видеть, гарантируется ли это, но каждый компилятор, который я использовал, делает это (таким образом, можно предположить, что это будет всегда работать).

Однако доверие этому преобразованию является плохой идеей. Код может прекратить компилировать, если новый метод добавляется что перегрузки int подпись, и т.д.

34
задан Joey 18 September 2009 в 17:30
поделиться

9 ответов

string date = myVariable.HasValue ? myVariable.Value.ToString() : string.Empty;
38
ответ дан 27 November 2019 в 15:49
поделиться

Вызов .ToString () для Nullable , то есть null , вернет пустую строку.

]
8
ответ дан 27 November 2019 в 15:49
поделиться
DateTime? d;
// stuff manipulating d;
return d != null ? d.Value.ToString() : String.Empty;
2
ответ дан 27 November 2019 в 15:49
поделиться
DateTime d?;
string s = d.HasValue ? d.ToString() : string.Empty;
1
ответ дан 27 November 2019 в 15:49
поделиться
DateTime? MyNullableDT;
....
if (MyNullableDT.HasValue)
{
    return MyNullableDT.Value.ToString();
}
return "";
1
ответ дан 27 November 2019 в 15:49
поделиться
if (aDate.HasValue)
    return aDate;
else
    return string.Empty;
1
ответ дан 27 November 2019 в 15:49
поделиться

Вы можете написать метод расширения

public static string ToStringSafe(this DateTime? t) {
  return t.HasValue ? t.Value.ToString() : String.Empty;
}

...
var str = myVariable.ToStringSafe();
7
ответ дан 27 November 2019 в 15:49
поделиться

Фактически, это поведение по умолчанию для типов, допускающих значение 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>
17
ответ дан 27 November 2019 в 15:49
поделиться

Хотя многие из этих ответов верны, все они излишне сложны. Результатом вызова ToString для объекта DateTime, допускающего значение NULL, уже является пустая строка, если значение логически равно NULL. Просто вызовите ToString для своего значения; он сделает именно то, что вы хотите.

101
ответ дан 27 November 2019 в 15:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: