一千萬個為什麽

搜索

是否有任何替代方法來編寫此switch語句(C#3.0)


可以以更好的方式完成

public static EnumFactorType GetFactorEnum(string str)
        {
            Standardization e = new Standardization();
            switch (str.ToLower())
            {
                case "beta":
                    e.FactorType = EnumFactorType.BETA;
                    break;
                case "bkp":
                    e.FactorType = EnumFactorType.BOOK_TO_PRICE;
                    break;
                case "yld":
                    e.FactorType = EnumFactorType.DIVIDEND_YIELD;
                    break;
                case "growth":
                    e.FactorType = EnumFactorType.GROWTH;
                    break;
                case "mean":
                    e.FactorType = EnumFactorType.MARKET_CAP;
                    break;
                case "momentum":
                    e.FactorType = EnumFactorType.MOMENTUM;
                    break;
                case "size":
                    e.FactorType = EnumFactorType.SIZE;
                    break;
                case "stat_fact1":
                    e.FactorType = EnumFactorType.STAT_FACT_1;
                    break;
                case "stat_fact2":
                    e.FactorType = EnumFactorType.STAT_FACT_2;
                    break;
                case "value":
                    e.FactorType = EnumFactorType.VALUE;
                    break;
            }
            return e.FactorType;
        }

如果我創建一個靜態類(比如Constatant)並聲明變量之類的

public static string BETA= "beta";

然後如果我嘗試把它放在Case表達式中

Case Constants.BETA : e.FactorType = EnumFactorType.BETA;
                        break;

然後編譯器將報告錯誤。(非常期待)

那麽還有其他方法嗎?(我可以改變switch語句)

使用C#3.0

謝謝

最佳答案

You could define a Dictionary as a "mapping" and use that instead. It's essentially the same logic but can be a bit more readable.

一,映射對象:

private Dictionary _mapping = new Dictionary
{
    { "beta", EnumFactorType.BETA },
    { "bkp", EnumFactorType.BOOK_TO_PRICE },
   //etc
}

然後在你的方法中:

e.FactorType = _mapping[str.ToLower()];

您可能希望首先調用_mapping.ContainsKey(str)以確保映射存在。

轉載註明原文: 是否有任何替代方法來編寫此switch語句(C#3.0)

猜你喜歡