c# - 使用基于枚举 C# 的开关

标签 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();

依此类推,直到夜幕降临。

有没有一种更简单的方法可以在没有枚举和开关的情况下执行此循环?

谢谢。

最佳答案

您可以简单地创建一个 Dictionary<int, Action>它将您的时间作为键以及要在值中执行的操作:

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

而不是简单地通过提供当前时间来执行委托(delegate):

dict[6]();

所以你甚至不会关心现在是白天还是黑夜,只要过了当前时间就可以离开了。

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

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

这样调用它:

weekMap["Monday"][6]()

执行farmer.DoAction .

关于c# - 使用基于枚举 C# 的开关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42110288/

相关文章:

javascript - 如何将 C# 使用的日期时间格式字符串转换为 moment.js 使用的格式?

java - 使用枚举访问静态变量

c++ - 对于循环数组迭代,if循环测试索引是否为真/假,错误地评估真

Java 使用带有 switch 语句的枚举

c# - 如何使用 CodeDom 添加没有实现的分部方法

c# - Azure Blob 的 sqlCacheDependency

c# - 在库中使用多线程有哪些策略?

ios - 我如何在字符串支持的枚举数组上使用字符串函数?

grails - 如何在g :select?中将i18n与Grails/Groovy枚举一起使用

C++ for循环和switch语句逻辑错误