Как проверить DateTime в C#?

Неустранимая ошибка: не может использовать возвращаемое значение функции в контексте записи

Это обычно происходит при непосредственном использовании функции с empty.

Пример:

if (empty(is_null(null))) {
  echo 'empty';
}

Это связано с тем, что empty - это языковая конструкция, а не функция, она не может быть вызвана с выражением в качестве аргумента в версиях PHP до 5.5. До PHP 5.5 аргумент empty() должен быть переменной , но произвольное выражение (такое как возвращаемое значение функции) допустимо в PHP 5.5 +.

empty, несмотря на его имя, на самом деле не проверяет, является ли переменная «пустой». Вместо этого он проверяет, существует ли переменная, или == false. Выражения (например, is_null(null) в примере) всегда будут считаться существующими, поэтому здесь empty проверяет только, равен ли он false. Здесь вы можете заменить empty() на !, например. if (!is_null(null)), или явно сравнить с ложным, например. if (is_null(null) == false).

Вопросы, относящиеся

112
задан Matt 19 December 2018 в 12:38
поделиться

5 ответов

DateTime.TryParse

Это, которому я верю, быстрее, и это означает, что Вы не должны использовать ужасную попытку/выгоды:)

, например,

DateTime temp;
if(DateTime.TryParse(startDateTextBox.Text, out temp))
{
  // Yay :)
}
else
{
  // Aww.. :(
}
255
ответ дан Stuart Frankish 24 November 2019 в 02:45
поделиться

Не используйте исключения для управления потоком. Используйте DateTime. TryParse и DateTime. TryParseExact. Лично я предпочитаю TryParseExact с определенным форматом, но я предполагаю, что существуют времена, когда TryParse лучше. Использование в качестве примера на основе Вашего исходного кода:

DateTime value;
if (!DateTime.TryParse(startDateTextBox.Text, out value))
{
    startDateTextox.Text = DateTime.Today.ToShortDateString();
}

Причины предпочтения этого подхода:

  • Более ясный код (это говорит, что это хочет сделать)
  • Лучшая производительность, чем ловля и глотание исключений
  • Это не ловит исключения неуместно - например, OutOfMemoryException, ThreadInterruptedException. (Ваш текущий код мог быть зафиксирован, чтобы избежать, чтобы это, просто ловя соответствующее исключение, но используя TryParse все еще было лучше.)
59
ответ дан Jon Skeet 24 November 2019 в 02:45
поделиться

Что относительно того, чтобы использовать TryParse?

3
ответ дан shapr 24 November 2019 в 02:45
поделиться

Я использовал бы DateTime. TryParse () метод: http://msdn.microsoft.com/en-us/library/system.datetime.tryparse.aspx

4
ответ дан GEOCHET 24 November 2019 в 02:45
поделиться

Проблема с использованием DateTime.TryParse состоит в том, что оно не поддерживает очень общий вариант использования ввода данных дат, вводимых без разделителей, например, 011508.

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

    private static readonly Regex ShortDate = new Regex(@"^\d{6}$");
    private static readonly Regex LongDate = new Regex(@"^\d{8}$");

    public object Parse(object value, out string message)
    {
        msg = null;
        string s = value.ToString().Trim();
        if (s.Trim() == "")
        {
            return null;
        }
        else
        {
            if (ShortDate.Match(s).Success)
            {
                s = s.Substring(0, 2) + "/" + s.Substring(2, 2) + "/" + s.Substring(4, 2);
            }
            if (LongDate.Match(s).Success)
            {
                s = s.Substring(0, 2) + "/" + s.Substring(2, 2) + "/" + s.Substring(4, 4);
            }
            DateTime d = DateTime.MinValue;
            if (DateTime.TryParse(s, out d))
            {
                return d;
            }
            else
            {
                message = String.Format("\"{0}\" is not a valid date.", s);
                return null;
            }
        }

    }
3
ответ дан Robert Rossney 24 November 2019 в 02:45
поделиться
Другие вопросы по тегам:

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