将System.DayOfWeek转换为Microsoft.Office.Interop.Outlook.OlDaysOfWeek

问题描述 投票:1回答:4

是否有可能直接将System.DayOfWeek的值转换为Microsoft.Office.Interop.Outlook.OlDaysOfWeek的值。就像是:

var day = DayOfWeek.Friday;
OlDaysOfWeek days = ConvertToDaysOfWeek(day);
c# outlook-api
4个回答
2
投票

要在不使用字符串操作的情况下执行此操作,请执行以下选项:

public OlDaysOfWeek ConvertToDaysOfWeek(DayOfWeek day)
{
    return (OlDaysOfWeek)Math.Pow(2, (int)day); 
}

2
投票

你可以试试这个:

var olDay = (OlDaysOfWeek) Enum.Parse(typeof(OlDaysOfWeek), $"ol{systemDay}");

1
投票

一个简单的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


1
投票

最后我找到了以下解决方案。谢谢你的提示。

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));
}
© www.soinside.com 2019 - 2024. All rights reserved.