任何关于如何重构以下内容的想法:
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方法传递多个参数,会发生什么情况。现在,只需要一个?
发布于 2011-11-11 00:41:34
将字符串值与enum关联的一种相当常见的方法是使用自定义属性,并在运行时使用反射来查找它。这是一个good explanation。
当然,使用反射在实践中会比仅仅使用条件更慢。
发布于 2011-11-11 00:51:19
一个明显的观察结果是,"type“的值并不重要--你可以只在"error”上开一个开关。
string.Format根据需要接受任意多的参数,例如
errorMessage = string.Format("Generic Error {0}. Other data {1}. ", id, otherData);发布于 2011-11-11 00:58:58
为什么不行?
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();
}https://stackoverflow.com/questions/8083019
复制相似问题