有关如何重构以下内容的任何想法:
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方法,会发生什么。现在,它只需要一个?
答案 0 :(得分:0)
将字符串值与enum
相关联的一种相当常见的方法是使用自定义属性,并在运行时使用反射查找它。这是一个good explanation。
当然,在实践中使用反射会比使用条件更慢。
答案 1 :(得分:0)
一个明显的观察结果是“类型”的值无关紧要 - 你可以只有一个“错误”开关。
string.Format根据需要获取尽可能多的参数,例如
errorMessage = string.Format("Generic Error {0}. Other data {1}. ", id, otherData);
答案 2 :(得分:0)
为什么不呢?
string GetGenericErrorText(ErrorType error, string id)
{
switch (error)
{
case ErrorType.One:
return string.Format("Generic Error {0}",id);
default:
return "Generic Error 2.";
}
}
和
string GetNonGenericErrorText(NonGenericError error)
{
case NonGenericError.One:
return "One";
case NonGenericError.Two:
reutrn "Two";
case NonGenericError.Three:
return "Three";
default:
return "Four";
}
修改强>
如果真实代码是一个简单的例子,你可以做
string GetNonGenericErrorText(NonGenericError error)
{
return error.ToString();
}