使用基于枚举C#的开关

时间:2017-02-08 10:16:09

标签: c# enums switch-statement

我要做一些关于创建农场的功课。 我必须在几小时和几天内(从早上6点到下午22点,周一到周六)描述每个事件。 我尝试使用基于这样的枚举的开关:

// this is the hour's enum (day and night).

 [Flags]
    enum Horaire
    {
        Journee =  6 | 7  | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 18 | 19 | 20 | 21,    
        Nuit = 22 | 23 | 0 | 1 | 2 | 3 | 4 | 5,

    }

在我的program.cs中,我想做一个while循环,例如:

While(Journee!=Nuit)

switch(Journee)

case 6: // for 6.am
Farmer.DoAction();

case 12 : // for 12.pm
Farmer.Eat();

依此类推,直至到达晚上。

没有枚举和开关,是否有更简单的方法来执行此循环?

谢谢。

2 个答案:

答案 0 :(得分:3)

你可以简单地创建一个ConEmu64.exe -quake -config "Quake" 来保存作为键的小时数以及要在值中执行的操作:

Dictionary<int, Action>

通过提供当前小时来简单地执行委托:

var dayMap = new Dictionary<int, Action> 
{
    { 6, farmer.DoAction },
    { 12, farmer.Eat },
    { 22, farmer.Sleep }
};

所以你甚至不关心它是白天还是晚上,只是通过当前时间而你已经离开了。

当你还想考虑工作日时,你需要一个嵌套字典:

dict[6]();

这样称呼:

var weekMap = new Dictionary<string, Dictionary<int, Action>>
{
    { "Monday", new Dictionary<int, Action> { ... }}
};

执行weekMap["Monday"][6]()

答案 1 :(得分:0)

您可以通过两个简单的循环逐步完成每周工作的农民和小时:

// Outer loop counts the day, 1 being Monday and 6 being Saturday
for (int day = 1; day <= 6; day++)
{
    // The Inner loop counts working hours from 6AM to 22PM.
    for (int hour = 6; hour <= 22; hour++)
    {
        // Now you can inspect 'day' and 'hour' to see where you are and take action                
    }
}

例如,他必须每天吃晚餐,这样你才能得到这样的案例:

if (hour == 12)
{
    Farmer.Eat();
}

他可能只在星期三上午10点而不是其他任何一天耕田:

if (day == 3 && hour == 10)
{
    Farmer.PlowFields();
}

您可能希望将开关放入如下方法:

public void DoWork(Farmer farmer, int day, int hour)
{
    if (hour == 6)
        farmer.WakeUp();

    if (day == 3 && hour == 10)
        farmer.PlowFields();
}

然后内圈的内部变成:

DoWork(farmer, day, hour);