Обнулить параметры в C #? - PullRequest
       54

Обнулить параметры в C #?

14 голосов
/ 12 сентября 2009

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

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

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

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

Ответы [ 6 ]

20 голосов
/ 12 сентября 2009

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

  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()
  }
8 голосов
/ 26 июля 2017

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

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

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

bool success = DateTime.TryParse(value, out _);
7 голосов
/ 12 сентября 2009

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

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

Тогда вы можете позвонить:

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

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

4 голосов
/ 12 сентября 2009

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

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

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

4 голосов
/ 12 сентября 2009

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

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

1 голос
/ 12 сентября 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...