Конвертировать System.DayOfWeek в Microsoft.Office.Interop.Outlook.OlDaysOfWeek - PullRequest
1 голос
/ 16 апреля 2019

Есть ли возможность напрямую преобразовать значение System.DayOfWeek в значение Microsoft.Office.Interop.Outlook.OlDaysOfWeek .Что-то вроде:

var day = DayOfWeek.Friday;
OlDaysOfWeek days = ConvertToDaysOfWeek(day);

Ответы [ 4 ]

2 голосов
/ 16 апреля 2019

Чтобы сделать это без использования строковых манипуляций, вот опция:

public OlDaysOfWeek ConvertToDaysOfWeek(DayOfWeek day)
{
    return (OlDaysOfWeek)Math.Pow(2, (int)day); 
}
2 голосов
/ 16 апреля 2019

Вы можете попробовать это:

var olDay = (OlDaysOfWeek) Enum.Parse(typeof(OlDaysOfWeek), $"ol{systemDay}");
1 голос
/ 16 апреля 2019

Наконец-то я нашел следующее решение.Спасибо за подсказки.

public static OlDaysOfWeek AsDaysOfWeek(this DayOfWeek dayOfWeek)
{
    return (OlDaysOfWeek)(1 << (int)dayOfWeek);
}

Для использования следующим образом:

var day = DayOfWeek.Friday;
OlDaysOfWeek days = day.AsDaysOfWeek();

Кроме того, это модульные тесты в NUnit для метода:

[TestCase(DayOfWeek.Monday, OlDaysOfWeek.olMonday)]
[TestCase(DayOfWeek.Tuesday, OlDaysOfWeek.olTuesday)]
[TestCase(DayOfWeek.Wednesday, OlDaysOfWeek.olWednesday)]
[TestCase(DayOfWeek.Thursday, OlDaysOfWeek.olThursday)]
[TestCase(DayOfWeek.Friday, OlDaysOfWeek.olFriday)]
[TestCase(DayOfWeek.Saturday, OlDaysOfWeek.olSaturday)]
[TestCase(DayOfWeek.Sunday, OlDaysOfWeek.olSunday)]
public void AsDaysOfWeek(DayOfWeek dayOfWeek, OlDaysOfWeek expectedResult)
{
    var result = dayOfWeek.AsDaysOfWeek();

    Assert.That(result, Is.EqualTo(expectedResult));
}
1 голос
/ 16 апреля 2019

Простой оператор 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 значение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...