首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在switch语句中重构下面的switch?

如何在switch语句中重构下面的switch?
EN

Stack Overflow用户
提问于 2011-11-11 00:39:04
回答 3查看 167关注 0票数 0

任何关于如何重构以下内容的想法:

代码语言:javascript
复制
 private string GetErrorText(ErrorType type, int error, string id)
 {
     string errorMessage = string.Empty;

     switch (type)
     {
         case ErrorType.Generic:
             switch (error)
             {
                 case (int)ErrorType.One:
                 errorMessage = string.Format("Generic Error {0}",id);
                 break;
                 case (int)ErrorType.Two:
                 errorMessage = "Generic Error 2.";
                 break;
             }
             break;
             case ErrorType.NonGeneric:
                    switch (error)
                    {
                        case (int)NonGenericError.One:
                            errorMessage = "One";
                            break;
                        case (int)NonGenericError.Two:
                            errorMessage = "Two";
                            break;
                        case (int)NonGenericError.Three:
                            errorMessage = "Three";
                            break;
                        case (int)NonGenericError.Four:
                            errorMessage = "Four"
                            break;
                    }
                    break;
            }
            return errorMessage;
        }

我知道我可以只返回字符串,而不是使用break关键字。我听说我可以把这个放到字典里,完全避免这种转换。另外,switch语句可以组合吗?如果我需要向string.Format方法传递多个参数,会发生什么情况。现在,只需要一个?

EN

回答 3

Stack Overflow用户

发布于 2011-11-11 00:41:34

将字符串值与enum关联的一种相当常见的方法是使用自定义属性,并在运行时使用反射来查找它。这是一个good explanation

当然,使用反射在实践中会比仅仅使用条件更慢。

票数 0
EN

Stack Overflow用户

发布于 2011-11-11 00:51:19

一个明显的观察结果是,"type“的值并不重要--你可以只在"error”上开一个开关。

string.Format根据需要接受任意多的参数,例如

代码语言:javascript
复制
errorMessage = string.Format("Generic Error {0}. Other data {1}. ", id, otherData);
票数 0
EN

Stack Overflow用户

发布于 2011-11-11 00:58:58

为什么不行?

代码语言:javascript
复制
string GetGenericErrorText(ErrorType error, string id)
{
   switch (error)              
   {
       case ErrorType.One:
           return string.Format("Generic Error {0}",id);

       default:
           return "Generic Error 2.";
    } 
}

代码语言:javascript
复制
string GetNonGenericErrorText(NonGenericError error)
{
   case NonGenericError.One:
       return "One";

   case NonGenericError.Two:
       reutrn "Two";

   case NonGenericError.Three: 
       return "Three";

   default: 
       return "Four";
}

编辑

如果真正的代码是一个简单的例子,你可以这样做

代码语言:javascript
复制
string GetNonGenericErrorText(NonGenericError error)
{
    return error.ToString();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8083019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档