2015-04-24 3 views
-2

iam, получающий от EWS WeeklyPattern с DaysOfTheWeek. Это в массиве, может быть один день или несколько.Как преобразовать массив DaysOfWeek в Enum?

У меня есть Enum, который называется DayOfWeekMask, и мне нужно преобразовать массив в Enum.

Когда Weeklypatter содержит "в понедельник, вторник"

Функция должна возвращать:

return DayOfWeekMask.olMonday | DayOfWeekMask.olThursday ; 

когда weeklypatter содержит 3 дня он должен вернуть 3 элемента.

это возможно?

+1

'' WeeklyPattern' содержит 1 строку, разделенную ',' или список строк? – stefankmitph

+0

Возможный дубликат [Как преобразовать строку в перечисление в C#?] (Http://stackoverflow.com/questions/16100/how-do-i-convert-a-string-to-an-enum-in -c) – BCdotWEB

+4

@BCdotWEB Я не думаю, что это дубликат. Это два разных вопроса. –

ответ

1

Имена обоих перечислений очень похожи (OlDaysOfWeek просто добавляет «ol» к началу имени), поэтому мы можем воспользоваться этим.

Это преобразует свойство DaysOfTheWeek (совокупность DayOfTheWeek значений) в OlDaysOfWeek (тип на 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.

+0

большое спасибо, это решило мою проблему –

1

Если у вас есть строку, отформатированную в виде списка разделенных запятыми дней:

"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. 
    } 
} 
+0

Вы посмотрели документацию WeeklyPattern.DaysOfTheWeek? –

+0

Я знаком с этим, но он сказал, что его еженедельный рисунок «понедельник, вторник» .... если это DayOfWeekCollection, это другое ... –

+0

Я думаю, что OP не имеет понятия (то есть он не показать доказательства любого) и ошибается по отношению к данным, которые он получает. –

0

Я не знаю точный формат ваших переменных, но что-то вдоль этих линий:

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); 
Смежные вопросы