关于这个问题:How to convert UPC-E to UPC-A?,我发现并改编了一种将UPC-E条形码转换为UPC-A的方法:
public static string ConvertUPCEToUPCA(string UPCE)
{
try
{
int UPCLen;
string UPCA = "";
int chkInt;
UPCLen = UPCE.Length;
FormatString formatString = new FormatString();
if (formatString.containsAlpha(UPCE) != -1)
{
UPCLen = 11;
}
if (UPCLen == 7) // Didn't enter a check digit
{
UPCE = UPCE.Substring(1,6);
}
else if (UPCLen == 8) // Entered both check digit and leading 0 digit
{
UPCE = UPCE.Substring(2,6);
}
if (UPCLen < 9)
{
chkInt = Convert.ToInt32(UPCE.Substring(5,1));
switch (chkInt)
{
case 0:
case 1:
case 2:
UPCA = UPCE.Substring(0,2) + UPCE.Substring(5,1) + "0000" + UPCE.Substring(2,3);
break;
case 3:
UPCA = UPCE.Substring(0,3) + "00000" + UPCE.Substring(3,2);
break;
case 4:
UPCA = UPCE.Substring(0,4) + "00000" + UPCE.Substring(4,1);
break;
case 5:
case 6:
case 7:
case 8:
case 9:
UPCA = UPCE.Substring(0,5) + "0000" + UPCE.Substring(5,1);
break;
default:
break;
}
UPCA = "0" + UPCA;
}
return UPCA;
}
catch(Exception ex)
{
Duckbill.ExceptionHandler(ex, "PlatypusUtils.ConvertUPCEToUPCA(UPCE)");
}
}
...但我得到了,“并非所有代码路径都返回一个值。”为什么?不是“归还UPCA”;无论怎么回事?
答案 0 :(得分:4)
如果发生异常,你不会返回任何内容。想一想:你已经找到了Exception
并且你已经处理过了。怎么办?调用者期望从您的方法返回一些,并且您的方法不会放弃任何。
你应该:
catch
块中返回一个字符串; Exception
区块中投掷catch
- 您抓住的那个或新的; null
块之前为其分配try
,空字符串或任何其他“默认”值。作为try
块中的最后一项,将结果值分配给此变量。将其返回finally
块。因此,如果发生错误,您至少可以返回一些内容。否则,您将返回操作结果。根据您的要求选择最适合您的选项。您也可以尝试一些变体。
编辑:我刚刚重新阅读了这个问题并特别注意了最后一句话。
不是“归还UPCA”;无论怎么回事?
没有。如果某处发生错误,try
块将停在违规行。执行直接进入第一个catch
块,它可以处理抛出的异常(无论如何只有你的情况)。
答案 1 :(得分:2)
即使代码抛出异常,您也应该总是返回一个值,因为您使用的方法是返回字符串并且不是 void 方法(不返回任何东西)
你应该在 Catch 括号之间返回字符串。