【问题标题】:How to Convert DaysOfWeek Array to a Enum?如何将 DaysOfWeek 数组转换为枚举?
【发布时间】:2015-04-24 13:39:40
【问题描述】:

我从 EWS 获得了带有 DaysOfTheWeek 的 WeeklyPattern。它在一个数组中,可以是一天或多次。

我有一个名为 DayOfWeekMask 的枚举,我需要将数组转换为枚举。

当 Weeklypatter 包含“Monday,Tuesday”时

函数应该返回:

return DayOfWeekMask.olMonday | DayOfWeekMask.olThursday ;

当每周模式包含 3 天时,它应该返回 3 个元素。

这可能吗?

【问题讨论】:

  • WeeklyPattern 是否包含 1 个由 , 分隔的字符串或字符串列表?
  • @BCdotWEB 我不认为这是重复的。这是两个不同的问题。
  • @GrantWinney 是不是这个:msdn.microsoft.com/en-us/library/…?
  • Eray,正确阅读文档,编写示例代码并再次询问。有一个最小的自包含示例。获取必要的信息是编程的第一步。

标签: c# arrays visual-studio-2010 enums exchangewebservices


【解决方案1】:

两个枚举中的名称非常相似(OlDaysOfWeek 只是在名称的开头附加了“ol”),因此我们可以利用这一点。

这会将DaysOfTheWeek 属性(DayOfTheWeek 值的集合)转换为OlDaysOfWeekDayOfWeekMask 属性上的类型),这似乎是您所要求的:

OlDaysOfWeek daysOfTheWeek =
    weeklyPattern.DaysOfTheWeek
                 .Select(x => (OlDaysOfWeek) Enum.Parse(typeof (OlDaysOfWeek), "ol" + x))
                 .Aggregate((x, y) => x | y);

如果您的初始集合包括DayOfTheWeek.TuesdayDayOfTheWeek.Thursday,这将输出一个等于OlDaysOfWeek.olTuesday | OlDaysOfWeek.olThursday 的值。

【讨论】:

    【解决方案2】:

    假设您有一个格式为逗号分隔的日期列表的字符串:

    "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,那么您可以直接转换 Enum 值:

    DayOfTheWeekCollection days;  // get this from somewhere
    
    foreach (var day in days) {
        switch (day) {
            case DayOfTheWeek.Monday:
                result |= DayOfWeekMask.Monday;
                break;
            case DayOfTheWeek.Tuesday:
                // etc.
        }
    }
    

    【讨论】:

    • 您查看 WeeklyPattern.DaysOfTheWeek 文档了吗?
    • 我很熟悉,但他说他的每周模式是“星期一、星期二”……如果是 DayOfWeekCollection,那就不一样了……
    • 我认为 OP 没有任何线索(也就是说,他没有出示任何证据)并且对他获得的数据有误。
    【解决方案3】:

    我不知道您的变量的确切格式,但大致如下:

    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);
    

    【讨论】:

      猜你喜欢
      • 2021-03-10
      • 2013-01-17
      • 2019-03-04
      • 1970-01-01
      • 2018-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多