DateTime.TryParse не принимает обнуляемый DateTime? - PullRequest
6 голосов
/ 26 января 2012

поэтому у меня есть эта переменная, которую я могу обнулять:

private DateTime? _startDate;

Я хотел проанализировать некоторую переменную в DateTime и затем присвоить ее этой переменной, но VS жалуется, что у метода TryParse есть недопустимые аргументы.

if (string.IsNullOrEmpty(Request.Form["StartDate"]) == false)
        {
            DateTime.TryParse(Request.Form["StartDate"], out _startDate);
        }
        else
        { _startDate = null; }

Есть ли у меня синтаксическая ошибка или я не могу использовать здесь переменные, допускающие значения NULL?

Ответы [ 4 ]

12 голосов
/ 26 января 2012

Как уже говорили другие, они не совместимы.Я бы предложил вам создать новый метод, который переносит DateTime.TryParse и , возвращает a Nullable<DateTime>:

// Add appropriate overloads to match TryParse and TryParseExact
public static DateTime? TryParseNullableDateTime(string text)
{
    DateTime value;
    return DateTime.TryParse(text, out value) ? value : (DateTime?) null;
}

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

_startDate = Helpers.TryParseNullableDateTime(Request.Form["StartDate"]);

(Нет необходимости проверять нулевую или пустую строку; TryParse в любом случае просто вернет false.)

10 голосов
/ 26 января 2012

Нет, DateTime.TryParse() не принимает DateTime?, поскольку DateTime? действительно Nullable<DateTime> - не совместимый тип.

Попробуйте вместо этого:

if (string.IsNullOrEmpty(Request.Form["StartDate"]) == false)
    {
        var dtValue = new DateTime();
        if (DateTime.TryParse(Request.Form["StartDate"], out dtValue)) {
            _startDate = dtValue;
        }
        else {
            _startDate = null;
        }
    }
    else
    { _startDate = null; }
0 голосов
/ 26 января 2012

Вот код.Исключение обработано.

if (string.IsNullOrEmpty(Request.Form["StartDate"]) == false)
        {
            DateTime strtDate;
            try
              {
                strtDate = Convert.ToDateTime(Request.Form["StartDate"]);
                _startDate = strtDate;
              }
            catch(Exception)
              {
               _startDate = null;
              }
         }
        else
        { 
       _startDate = null;
        }
0 голосов
/ 26 января 2012

DateTime? и DateTime - это разные и несовместимые типы по отношению к out. Поэтому вам нужно использовать DateTime, а затем скопировать значение, как в ответе Юка.

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