Является ли строка допустимым часовым поясом в .Net - PullRequest
4 голосов
/ 12 марта 2012

Я получаю строку в качестве параметра json, и это должен быть идентификатор часового пояса. Я хочу проверить это.

Вот что у меня есть:

TheTimezoneID = TheTimezoneID.Trim();
var AllTimezones = TimeZoneInfo.GetSystemTimeZones();

if (TheTimezoneID "is a valid .net timezone" == true) {}

Какое выражение linq будет проверять, если TheTimezoneID находится в AllTimezones? Я пытался использовать .Any, но он не работает.

Спасибо.

1 Ответ

9 голосов
/ 12 марта 2012

Если вы собираетесь делать это в различных ситуациях, вам, вероятно, следует использовать:

private static readonly HashSet<string> AllTimeZoneIds = 
    new HashSet<string>(TimeZoneInfo.GetSystemTimeZones()
                                    .Select(tz => tz.Id));

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

if (AllTimeZoneIds.Contains(timeZoneId))

Нет необходимости использовать LINQ дляитерируйте по всему списку часовых поясов каждый раз, когда хэш-набор может просто выполнить поиск O (1).

Если вам просто интересно использовать Any, это будет:

if (AllTimeZoneIds.Select(tz => tz.Id).Contains(timeZoneid))

или

if (AllTimeZoneIds.Any(tz => tz.Id == timeZoneid))

Обратите внимание, что «идентификатор часового пояса» является довольно неясным понятием.Это проверит, действительно ли это .NET идентификатор часового пояса.Если вы на самом деле получаете часовые пояса, такие как «Европа / Лондон», это другое дело.

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