是否有任何替代方法来编写此switch语句(C#3.0)

New*_*bie 1 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;
        }
Run Code Online (Sandbox Code Playgroud)

如果我创建一个静态类(比如Constatant)并声明变量之类的

public static string BETA= "beta";
Run Code Online (Sandbox Code Playgroud)

然后如果我试着把它放在Case表达式中

Case Constants.BETA : e.FactorType = EnumFactorType.BETA;
                        break;
Run Code Online (Sandbox Code Playgroud)

然后编译器将报告错误.(非常期待)

那么还有其他方法吗?(我可以改变switch语句)

使用C#3.0

谢谢

Mat*_*ton 7

您可以将其定义Dictionary<string, EnumFactorType>为"映射"并使用它.它本质上是相同的逻辑,但可以更具可读性.

一,映射对象:

private Dictionary<string, EnumFactorType> _mapping = new Dictionary<string, EnumFactorType>
{
    { "beta", EnumFactorType.BETA },
    { "bkp", EnumFactorType.BOOK_TO_PRICE },
    // etc
}
Run Code Online (Sandbox Code Playgroud)

然后在你的方法中:

e.FactorType = _mapping[str.ToLower()];
Run Code Online (Sandbox Code Playgroud)

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