Является ли это значение действительным годом C # - PullRequest
1 голос
/ 03 декабря 2009

Какой лучший способ проверить, является ли строка действительным годом, используя C #?

В настоящее время у меня есть раскрывающийся список со значениями {'Все', '2009', '2008'} и т. Д., И я хочу знать, является ли выбор одной из дат или полем «Все».

В настоящее время я проверяю на bool isYearValid = (Year.ToLower() == "all") ? false : true;

Как проверить, является ли значение действительным годом, чтобы мне не нужно было иметь эту жестко заданную проверку для «Все»?

Ответы [ 6 ]

10 голосов
/ 03 декабря 2009

Учитывая, что год просто должен быть действительным числом, вы можете просто использовать int32.TryParse, а затем просто проверить диапазон на основе того, в каком диапазоне вы хотите, чтобы год был.

8 голосов
/ 03 декабря 2009

Вы можете попробовать проанализировать год как целое число:

int iYear = 0;

if (Int.TryParse(Year, out iYear))
{
  //You have a valid year inside iYear
  //If you are not sure about the dropdown list values,
  //you can of course do more checks for validity. For example:
  //if iYear is in a proper range
}
3 голосов
/ 03 декабря 2009

вы можете использовать:

        DateTime dateTime;
        var year = ...
        DateTime.TryParse(string.Format("1/1/{0}", year), out dateTime);
0 голосов
/ 03 декабря 2009

Ну, никто не упомянул об этом, но почему бы не определить символ "Все"? где-нибудь и использовать это как в выпадающей инициализации, так и в сравнении?

0 голосов
/ 03 декабря 2009

Как насчет:

<asp:ListItem Value="1900" Text="All" />

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

Кроме этого, DateTime.TryParse - это правильный способ выяснить, является ли строковое представление действительной датой.

0 голосов
/ 03 декабря 2009

Разве это не было бы лучше в любом случае?

bool isYearValid = !string.Equals(Year, "all", StringComparison.OrdinalIgnoreCase);
...