作为C#的初学者,我试图通过尽可能缩短来改进我的代码。我编写了一个Windows时区应用程序,用于定义和填充大量的TimeZoneInfo变量。问题是有近90个时区在使用,所以我目前的做法似乎很麻烦。是否可以使用数组循环来实现180行代码?
除了简洁之外,我还希望能够捕获由用户PC的注册表中未定义的特定时区引起的任何错误。必须在try catch块中包装每个TimeZoneInfo.FindSystemTimeZoneById()似乎非常笨拙,而不是正确的方法。我的想法是,循环结构可以更容易地捕获特定错误。
//Declare the TimeZoneInfo variables:
TimeZoneInfo tziHawaii;
TimeZoneInfo tziAlaska;
TimeZoneInfo tziPacific;
TimeZoneInfo tziCentral;
....
// Populate each TimeZoneInfo variable with relevant info:
tziHawaii = TimeZoneInfo.FindSystemTimeZoneById("Hawaiian Standard Time");
tziAlaska = TimeZoneInfo.FindSystemTimeZoneById("Alaskan Standard Time");
tziPacific = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
tziCentral = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
....
我试图创建一个循环结构来执行以上180行代码但它不起作用。我只是看不到如何创建一个名为TimeZoneInfo变量的数组,如上面的摘录(tziHawaii,tziAlaska等)。
如果有人能指出我的方式错误,我会非常高兴。
string[] arrWindowsTimeZones = new string[] { "Hawaiian Standard Time", "Alaskan Standard Time", "Pacific Standard Time", "Central Standard Time" };
TimeZoneInfo[] arrTimeZoneInfo = new TimeZoneInfo[] { DON'T KNOW WHAT TO PUT HERE} ;
for (int i = 0; i < arrWindowsTimeZones.GetUpperBound(0) + 1; i++)
{
arrTimeZoneInfo[i] = TimeZoneInfo.FindSystemTimeZoneById(arrWindowsTimeZones[i]);
}
答案 0 :(得分:0)
TimeZoneInfo.GetSystemTimeZones方法将返回有关本地系统可用信息的所有时区的已排序集合。
来自文档:
GetSystemTimeZones方法检索所有可用时区 来自注册表子项的信息 HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Time 区域密钥。如果它无法成功检索和解析值 对于单个TimeZoneInfo对象的特定字符串属性, 此方法将其值设置为空字符串(“”)。
答案 1 :(得分:0)
我同意TimeZoneInfo.GetSystemTimeZones()可能是你想要的,但如果你必须像你第一次问的那样手动完成,那么这就是代码:
List<string> arrWindowsTimeZones = new List<string>() { "Hawaiian Standard Time", "Alaskan Standard Time", "Pacific Standard Time", "Central Standard Time" };
List<TimeZoneInfo> arrTimeZoneInfo = new List<TimeZoneInfo>();
foreach (string zoneString in arrWindowsTimeZones)
{
arrTimeZoneInfo.Add(TimeZoneInfo.FindSystemTimeZoneById(zoneString));
}