簡體   English   中英

枚舉和字典<enum, action></enum,>

[英]Enum and Dictionary<Enum, Action>

我希望我能以一種對每個人都清楚的方式來解釋我的問題。 我們需要您對此提出建議。

我們有一個枚舉類型,其中定義了超過 15 個常量。 我們收到來自 web 服務的報告,並將其一列轉換為該枚舉類型。 根據我們從 web 服務收到的信息,我們使用 Dictionary 運行特定功能

我為什么要征求意見? 假設這些 Enum contants 中有 3 個在我們的 Dictionary 中滿足特定功能,但是 rest 使用相同的 function。那么,有沒有辦法以更好的方式將它們添加到我們的 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 }
};

所以基本上我要問的是,有沒有辦法更智能地添加Reason, Function對? 因為正如您在 ReasonC 之后看到的那樣,所有其他原因都使用相同的 function。

謝謝你的建議。

您可以嘗試這樣的事情,只將自定義 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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM