C# 字符串在.Net中是否为有效时区

C# 字符串在.Net中是否为有效时区,c#,timezone,C#,Timezone,我收到一个字符串作为json参数,它应该是一个时区ID。我想检查一下 这就是我所拥有的: TheTimezoneID = TheTimezoneID.Trim(); var AllTimezones = TimeZoneInfo.GetSystemTimeZones(); if (TheTimezoneID "is a valid .net timezone" == true) {} 如果时区ID在所有时区中,将测试的linq表达式是什么?我试过使用。任何,但都不起作用 谢谢。如果要在各种情

我收到一个字符串作为json参数,它应该是一个时区ID。我想检查一下

这就是我所拥有的:

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

if (TheTimezoneID "is a valid .net timezone" == true) {}
如果
时区ID
所有时区中,将测试的linq表达式是什么?我试过使用
。任何
,但都不起作用


谢谢。

如果要在各种情况下执行此操作,您可能应该使用:

private static readonly HashSet<string> AllTimeZoneIds = 
    new HashSet<string>(TimeZoneInfo.GetSystemTimeZones()
                                    .Select(tz => tz.Id));
当哈希集每次只能执行O(1)查找时,不需要使用LINQ迭代整个时区列表

如果您只是对使用
任何
感到好奇,您可能会:

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


请注意,“时区ID”是一个相当模糊的概念。这将检查它是否是一个有效的.NET时区ID。如果你实际上得到的是“欧洲/伦敦”这样的时区,那就不同了。

很难判断你想要做什么-找到一个字符串是否代表一个有效的时区,或者一组字符串是否都代表有效的时区。如果要测试所有时区ID是否都有效,则需要.all而不是.Any。@AdamMihalcin:只需一次检查一个字符串。用户正在从页面上的下拉列表中选择时区:我用.net的值填充下拉列表,但在返回的过程中我仍在检查。只是好奇,私有静态只读哈希集是什么构造?它像一本字典吗?@frenchie:它像一本只有钥匙的字典。看见
if (AllTimeZoneIds.Select(tz => tz.Id).Contains(timeZoneid))
if (AllTimeZoneIds.Any(tz => tz.Id == timeZoneid))