c# - 枚举和字典<枚举, Action >

标签 c# .net dictionary enums

我希望我能以一种对每个人都清楚的方式来解释我的问题。 我们需要您对此提出建议。

我们有一个枚举类型,其中定义了超过 15 个常量。 我们收到来自 Web 服务的报告,并将其一列转换为该 Enum 类型。 根据我们从该 Web 服务收到的信息,我们使用以下命令运行特定功能 词典

我为什么要征求意见? 假设这些 Enum contants 中的 3 个满足我们 Dictionary 中的特定功能,但其余的使用相同的功能。那么,有没有一种方法可以更好地将它们添加到我们的词典中,而不是一个一个地添加?我也想保留这个结构,因为到时候,我们可能会在未来为我描述为“其余部分”的功能提供特定功能。

为了更清楚,这里有一个我们正在尝试做的例子:

枚举:

public enum Reason{
    ReasonA,
    ReasonB,
    ReasonC,
    ReasonD,
    ReasonE,
    ReasonF,
    ReasonG,
    ReasonH,
    ReasonI,
    ReasonJ,
    ReasonK
}

定义我们的字典:

public Dictionary<Reason, Action<CustomClassObj, string>> ReasonHandlers = new Dictionary<Reason, Action<CustomClassObj, string>>{
    { Reason.ReasonA, HandleReasonA },
    { Reason.ReasonB, HandleReasonB },
    { Reason.ReasonC, HandleReasonC },
    { Reason.ReasonD, HandleReasonGeneral },
    { Reason.ReasonE, HandleReasonGeneral },
    { Reason.ReasonF, HandleReasonGeneral },
    { Reason.ReasonG, HandleReasonGeneral },
    { Reason.ReasonH, HandleReasonGeneral },
    { Reason.ReasonI, HandleReasonGeneral },
    { Reason.ReasonJ, HandleReasonGeneral },
    { Reason.ReasonK, HandleReasonGeneral }
};

所以基本上我要问的是,有没有办法更智能地添加原因,功能对?因为正如您在 ReasonC 之后看到的那样,所有其他原因都使用相同的函数。

感谢您的建议。

最佳答案

您可以尝试这样的事情,只将自定义 Reason 处理程序放入字典中,然后回退到 General 处理程序。

public Dictionary<Reason, Action<CustomClassObj, string>> ReasonHandlers = new Dictionary<Reason, Action<CustomClassObj, string>>{
    { Reason.ReasonA, HandleReasonA },
    { Reason.ReasonB, HandleReasonB },
    { Reason.ReasonC, HandleReasonC }};


public Action<CustomClassObj, string> ReasonHandlerLookup (Reason reason) {
    Action<CustomClassObj, string> result = null;
    ReasonHandlers.TryGetValue(reason, out result);
    return result ?? HandleReasonGeneral;
}

关于c# - 枚举和字典<枚举, Action >,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10033077/

相关文章:

c# - 测试我是否可以迭代字典并将键和值写入控制台

c# - 使用 Webdriver 循环浏览页面上的每个链接

c# - OrderBy 中的意外结果

python - 在python中存储带有键和键的多值的字典的问题

arrays - Go中的未知深度列表

c# - Rijndael:C++加密,C#解密

c# - 在模型中设置 DataType.DateTime 的初始值

c# - 如何分发来自 TCP 监听器的请求

c# - DBcontext.Database.Log : executable sql query

ios - 如何从Swift 4/json字典中的多值键检索单个值?