строка в DateTime?расширение Convert. * или что-то лучше - PullRequest
1 голос
/ 04 января 2012

надеюсь, я не воссоздаю что-то, уже просили 1000 раз, но поиск этого затруднен из-за '?' - s.

Я хочу преобразовать строку в Datetime?в с #.Что может быть лучше, чем это:

    private static DateTime? toDate(string probDate)
    {
        if (probDate == null) { return null; }
        else { return Convert.ToDateTime(probDate); }
    }

Заранее спасибо,

Гарри

Ответы [ 4 ]

3 голосов
/ 04 января 2012
private static DateTime? toDate(string probDate)
{
    if (!string.IsNullOrWhiteSpace(probDate)) {
        DateTime converted;
        if (DateTime.TryParse(probDate, out converted))
        {
            return converted;
        }
    }
    return null;
}

Это зависит. Если probDate не может быть преобразован, что вы хотите, чтобы произошло? Должен ли метод возвращать нуль или выдавать исключение?

Ответ на комментарий # 1

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

public static class StringExtensions
{
    public static DateTime? ToDate(this string probDate)
    {
        // same code as above
    }
}

Затем вы можете выполнить это так:

string probDate = "1/4/2012";
DateTime? toDate = probDate.ToDate();
2 голосов
/ 04 января 2012

Ну, вы можете хотя бы использовать условное выражение:

private static DateTime? ToDate(string text)
{
    return text == null ? (DateTime?) null : Convert.ToDateTime(text);
}

Лично я бы, вероятно, использовал DateTime.ParseExact с ожидаемым форматом, а не Convert.ToDateTime, но это другой вопрос.1007 * Вы на самом деле не объяснили, какая здесь более широкая картина - откуда взялся текст? имеет ожидаемый формат?Вы должны быть чувствительными к культуре?Что вы хотите случиться, если текст не может быть проанализирован?

1 голос
/ 04 января 2012
static class Program
  {

    //Extension method for string
    public static DateTime? ToNullableDate(this string text)
    {
      return string.IsNullOrEmpty(text)  ? (DateTime?)null : Convert.ToDateTime(text);
    }

    static void Main()
    {
      string s = null;
      DateTime? d = s.ToNullableDate();

      s = "1/1/2012";
      d = s.ToNullableDate();
    }  
  }
1 голос
/ 04 января 2012

Я бы использовал расширение методы (если вы используете .Net 3.5+).Он очень элегантный и многоразовый.

Вот так:

public static class Extensions
{
    public static DateTime? ToNullableDate(this String dateString)
    {
        if (String.IsNullOrEmpty((dateString ?? "").Trim()))
            return null;

        DateTime resultDate;
        if(DateTime.TryParse(dateString, out resultDate))
            return resultDate;

        return null;
    }
}


public class Test
{
    public Test()
    {
        string dateString = null;
        DateTime? nullableDate = dateString.ToNullableDate();            
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...