日期:2014-05-18  浏览次数:21067 次

对IF ELSE重构的问题
C# code

private string getStatus(int status)
{
    string strStatus = "";
    if(status.toString().Trim().Equals("status.name.good"))
    {
        strStatus = "status.value.good";
    }else if(status.toString().Trim().Equals("status.name.bad"))
    { 
        strStatus = "status.value.bad";
    }else if(status.toString().Trim().Equals("status.name.normal"))
    {
        strStatus = "status.value.normal";
    }
    return strStatus;
}


这个IF ELSE有些规律大家帮忙重构一下。

------解决方案--------------------
该段代码永远返回空值,一个int型的再怎么转换也不可能和一个标准字符串相等.
C# code

 private string getStatus(int status)
            {
                string strStatus = "";
                switch (status.ToString().Trim())
                {
                    case "status.name.good":
                        strStatus = "status.value.good";
                        break;
                    case "status.name.bad":
                        strStatus = "status.value.bad";
                        break;
                    case "status.name.normal":
                        strStatus = "status.value.normal";
                        break;
                    default:
                        break;

                }
                return strStatus;
            }

------解决方案--------------------
strStatus = new System.Text.RegularExpressions.Regex(@"status.value.\w+").Match(status.ToString().Trim()).Value;
我只是怀疑,int类型的status在ToString怎么可能等于那些字符串?
------解决方案--------------------
C# code
比较好的办法是定义个全局变量的字典 
SortedList<int, string> slist = new SortedList<int, string>();

启动时就把配置文件里和这有关的读到字典里
string[] arr = { "good", "bad", "normal" };
foreach (var item in arr)
{
    slist.Add(int.Parse(Util.getValue("status.name." + item)), Util.getValue("status.value." + item));
}

查询方法
private string getStatus(int status)
{
    string str;
    slist.TryGetValue(status, out str);
    return str;
}