可以以更好的方式完成
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
谢谢
您可以将其定义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)以确保映射存在.
| 归档时间: |
|
| 查看次数: |
177 次 |
| 最近记录: |