如何将 DaysOfWeek 数组转换为枚举?
How to Convert DaysOfWeek Array to a Enum?
我正在使用 DaysOfTheWeek 从 EWS 获取 WeeklyPattern。它在数组中,可以是一天或多天。
我有一个名为 DayOfWeekMask 的枚举,我需要将数组转换为枚举。
当 Weeklypatter 包含 "Monday,Tuesday"
函数应该return:
return DayOfWeekMask.olMonday | DayOfWeekMask.olThursday ;
当每周模式包含 3 天时,它应该 return 3 个元素。
这可能吗?
假设您有一个格式化为以逗号分隔的天数列表的字符串:
"Monday, Tuesday, Thursday"
你可以Split
把它变成一个字符串数组并解析每个元素:
var days = weekString.Split(',', StringSplitOptions.RemoveEmptyEntries);
DayOfWeekMask? result = null;
foreach (var day in days) {
var enumDayName = "ol" + day;
if (Enum.IsDefined(typeof(DayOfWeekMask), enumDayName)) {
result |= (DayOfWeekMask)Enum.Parse(typeof(DayOfWeekMask), enumDayName, true);
}
}
请注意,您需要为 DayOfWeekMask
的每个元素定义值,以使 ORing 正常工作!
如果您的输入是DayOfTheWeekCollection
,那么您可以直接转换枚举值:
DayOfTheWeekCollection days; // get this from somewhere
foreach (var day in days) {
switch (day) {
case DayOfTheWeek.Monday:
result |= DayOfWeekMask.Monday;
break;
case DayOfTheWeek.Tuesday:
// etc.
}
}
我不知道您的变量的确切格式,但大致如下:
return (WeeklyPattern.Contains( "Monday") ? DayOfWeekMask.olMonday : 0)
| (WeeklyPattern.Contains( "Tuesday") ? DayOfWeekMask.olTuesday : 0)
| (WeeklyPattern.Contains( "Wednesday") ? DayOfWeekMask.olWednesday : 0)
| (WeeklyPattern.Contains( "Thursday") ? DayOfWeekMask.olThursday : 0)
| (WeeklyPattern.Contains( "Friday") ? DayOfWeekMask.olFriday : 0);
两个枚举中的名称非常相似(OlDaysOfWeek
只是将 "ol" 附加到名称的开头),因此我们可以利用这一点。
这会转换 DaysOfTheWeek
property (a collection of DayOfTheWeek
values) to OlDaysOfWeek
(the type on the DayOfWeekMask
属性),这似乎是您所要求的:
OlDaysOfWeek daysOfTheWeek =
weeklyPattern.DaysOfTheWeek
.Select(x => (OlDaysOfWeek) Enum.Parse(typeof (OlDaysOfWeek), "ol" + x))
.Aggregate((x, y) => x | y);
如果您的初始集合包括 DayOfTheWeek.Tuesday
和 DayOfTheWeek.Thursday
,这将输出一个等于 OlDaysOfWeek.olTuesday | OlDaysOfWeek.olThursday
的值。
我正在使用 DaysOfTheWeek 从 EWS 获取 WeeklyPattern。它在数组中,可以是一天或多天。
我有一个名为 DayOfWeekMask 的枚举,我需要将数组转换为枚举。
当 Weeklypatter 包含 "Monday,Tuesday"
函数应该return:
return DayOfWeekMask.olMonday | DayOfWeekMask.olThursday ;
当每周模式包含 3 天时,它应该 return 3 个元素。
这可能吗?
假设您有一个格式化为以逗号分隔的天数列表的字符串:
"Monday, Tuesday, Thursday"
你可以Split
把它变成一个字符串数组并解析每个元素:
var days = weekString.Split(',', StringSplitOptions.RemoveEmptyEntries);
DayOfWeekMask? result = null;
foreach (var day in days) {
var enumDayName = "ol" + day;
if (Enum.IsDefined(typeof(DayOfWeekMask), enumDayName)) {
result |= (DayOfWeekMask)Enum.Parse(typeof(DayOfWeekMask), enumDayName, true);
}
}
请注意,您需要为 DayOfWeekMask
的每个元素定义值,以使 ORing 正常工作!
如果您的输入是DayOfTheWeekCollection
,那么您可以直接转换枚举值:
DayOfTheWeekCollection days; // get this from somewhere
foreach (var day in days) {
switch (day) {
case DayOfTheWeek.Monday:
result |= DayOfWeekMask.Monday;
break;
case DayOfTheWeek.Tuesday:
// etc.
}
}
我不知道您的变量的确切格式,但大致如下:
return (WeeklyPattern.Contains( "Monday") ? DayOfWeekMask.olMonday : 0)
| (WeeklyPattern.Contains( "Tuesday") ? DayOfWeekMask.olTuesday : 0)
| (WeeklyPattern.Contains( "Wednesday") ? DayOfWeekMask.olWednesday : 0)
| (WeeklyPattern.Contains( "Thursday") ? DayOfWeekMask.olThursday : 0)
| (WeeklyPattern.Contains( "Friday") ? DayOfWeekMask.olFriday : 0);
两个枚举中的名称非常相似(OlDaysOfWeek
只是将 "ol" 附加到名称的开头),因此我们可以利用这一点。
这会转换 DaysOfTheWeek
property (a collection of DayOfTheWeek
values) to OlDaysOfWeek
(the type on the DayOfWeekMask
属性),这似乎是您所要求的:
OlDaysOfWeek daysOfTheWeek =
weeklyPattern.DaysOfTheWeek
.Select(x => (OlDaysOfWeek) Enum.Parse(typeof (OlDaysOfWeek), "ol" + x))
.Aggregate((x, y) => x | y);
如果您的初始集合包括 DayOfTheWeek.Tuesday
和 DayOfTheWeek.Thursday
,这将输出一个等于 OlDaysOfWeek.olTuesday | OlDaysOfWeek.olThursday
的值。