Нулевые параметры в С#?

После чтения в stackoverflow, чтобы в случае проверки формата DateTime вы должны использовать DateTime.TryParse. После использования некоторых выражений регулярных выражений они кажутся длинными и неприятными для покрытия большого количества форматирования.

Но TryParse требует параметр "out", и поскольку я просто хочу проверить формат проверки, мне не нужен фактический результат.

Итак, я остаюсь с переменной, которая содержит результат "out", и я ничего не делаю с ней. Есть ли способ, поэтому мне не нужно делать параметр out?

Поэтому я избавляюсь от этого предупреждения и перестаю иметь переменную, просто летающую вокруг.

Ответы

Ответ 1

Неа. Я бы обернул его каким-то способом, чтобы сохранить шум из основного потока:

  bool IsValidDate(string value)
  {
     DateTime result;
     return DateTime.TryParse(value, out result); //result is stored, but you only care about the return value of TryParse()
  }

Ответ 2

В С# 7.0 (с августа 2016 года) вы можете использовать конструкцию out var, а затем просто игнорировать новый var в последующем коде.

bool success = DateTime.TryParse(value, out var result);

Если вы действительно не заботитесь о значении результата, используйте Discards:

bool success = DateTime.TryParse(value, out _);

Ответ 3

Я не предлагаю вам на самом деле это сделать, но вы можете использовать один вспомогательный класс, чтобы сделать это легко для всех параметров:

public static class OutHelper<T>
{
    [ThreadStatic]
    public static T Ignored;
}

Затем вы можете позвонить:

if (DateTime.TryParse(text, out OutHelper<DateTime>.Ignored))

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

Ответ 4

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

Передача переменной в качестве out является "использованием" переменной. Из-за этого компилятор не выдаст предупреждение.

Ответ 5

Если вы используете .NET 3 и выше, вы всегда можете создать метод расширения?

public static bool IsValidDate(this string value)
{
  DateTime date = DateTime.Null;
  return DateTime.TryParse(value, out date);
}

[Отредактировано, чтобы переименовать имя метода в более подходящее]

Ответ 6

TryParse - лучший вариант. Это просто переменная, которая теряется. Другие варианты включают использование Convert.ToDateTime() в блоке try-catch. Но опять же это было бы неэффективно, потому что блоки try-catch должны быть тяжелыми. Следующая опция - регулярное выражение. Это лучшее решение. Я думаю, это дает вам результат мгновенно, чем по сравнению с другими.

Вы можете очень хорошо обернуть метод, как сказал Ким Грэсман...