枚举和词典<enum,action =“”> </enum,>

时间:2012-04-05 17:21:02

标签: c# .net dictionary enums

我希望我能以一种对所有人都清楚的方式解释我的问题。 我们需要你的建议。

我们有一个枚举类型,它定义了超过15个常量。 我们从Web服务接收报告,并将其一列转换为此Enum类型。 根据我们从该Web服务收到的内容,我们使用特定的功能 字典

我为什么要求提出想法? 假设这些Enum容器中的3个符合我们字典中的特定功能,但其余部分使用相同的功能。那么,有没有办法以更好的方式将它们添加到我们的字典中,而不是逐个添加它们?我也希望保留这种结构,因为在适当的时候,我们可能会在将来为我所描述的“其余部分”提供特定的功能。

更清楚这里是我们要做的一个例子:

枚举:

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

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

感谢您的建议。

1 个答案:

答案 0 :(得分:13)

您可以尝试这样的方法,只将自定义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;
}