我要做一些关于创建农场的功课。 我必须在几小时和几天内(从早上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();
依此类推,直至到达晚上。
没有枚举和开关,是否有更简单的方法来执行此循环?
谢谢。
答案 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);