Простой оператор switch, вероятно, был бы наиболее эффективным:
public OlDaysOfWeek ConvertToDaysOfWeek(DayOfWeek day)
{
switch (day)
{
case DayOfWeek.Monday: return OlDaysOfWeek.olMonday;
case DayOfWeek.Tuesday: return OlDaysOfWeek.olTuesday;
case DayOfWeek.Wednesday: return OlDaysOfWeek.olWednesday;
case DayOfWeek.Thursday: return OlDaysOfWeek.olThursday;
case DayOfWeek.Friday: return OlDaysOfWeek.olFriday;
case DayOfWeek.Saturday: return OlDaysOfWeek.olSaturday;
case DayOfWeek.Sunday: return OlDaysOfWeek.olSunday;
default: throw new ArgumentOutOfRangeException("What day is this?", "day");
}
}
В качестве альтернативы, вы могли бы, вероятно, проанализировать значение и вернуть сопоставленное значение на основе имени значения перечисления.
public OlDaysOfWeek ConvertToDaysOfWeek(DayOfWeek day)
{
return (OlDaysOfWeek) Enum.Parse(typeof(OlDaysOfWeek), "ol" + day.ToString());
}
Перечисление OlDaysOfWeek
использует последовательность степени 2, которая обычно используется при объединении значений в виде побитовых флагов.DaysOfWeek
имеет простую линейную последовательность, отображаемую как 0-6 - поэтому нельзя сравнивать, используя int
значение