0

关于这个问题:如何将 UPC-E 转换为 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”吗?不管什么达到线?

4

2 回答 2

4

如果发生异常,您不会返回任何内容。想一想:你已经抓住了一个Exception并且你已经处理了它。怎么办?调用者期望从您的方法中获得一些回报,而您的方法并没有释放任何回报。

您应该:

  • 返回块中的字符串catch
  • 把一个扔进方块Exceptioncatch——要么是你抓到的,要么是新的;
  • 创建一个变量来存储您要返回的值。在块之前为其分配一个null空字符串或任何其他“默认”值。作为块中的最后一件事,将结果值分配给该变量。以块的形式返回它。因此,如果发生错误,您至少可以返回一些东西。否则,您将返回操作的结果。trytryfinally

根据您的要求选择最适合您的选项。您也可以尝试其中的一些变体。

编辑:我刚刚重新阅读了这个问题,并特别注意了最后一句话。

不是“返回UPCA”吗?不管什么达到线?

不会。如果某处发生错误,该try块将停在有问题的行。执行直接进入catch可以处理抛出异常的第一个块(无论如何,你的情况只有一个)。

于 2013-09-13T22:34:05.053 回答
2

即使代码抛出异常,您也应该始终返回一个值,因为您使用的方法返回字符串并且不是void方法(不返回任何内容)

您应该在Catch括号之间返回一个字符串。

于 2013-09-13T22:32:48.463 回答