Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么这段代码并不总是返回一个值?_C#_Barcode - Fatal编程技术网

C# 为什么这段代码并不总是返回一个值?

C# 为什么这段代码并不总是返回一个值?,c#,barcode,C#,Barcode,关于这个问题,我发现并采用了一种方法将UPC-E条形码转换为UPC-a: public static string ConvertUPCEToUPCA(string UPCE) { try { int UPCLen; string UPCA = ""; int chkInt; UPCLen = UPCE.Length; FormatString formatString = new FormatS

关于这个问题,我发现并采用了一种方法将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)");
    }
}
公共静态字符串转换器UPCETOUPCA(字符串UPCE)
{
尝试
{
int UPCLen;
字符串UPCA=“”;
int chkInt;
UPCLen=UPCE.长度;
FormatString FormatString=新的FormatString();
if(formatString.containsAlpha(UPCE)!=-1)
{
UPCLen=11;
}
if(UPCLen==7)//未输入校验位
{
UPCE=UPCE子串(1,6);
}
else if(UPCLen==8)//输入校验位和前导0位
{
UPCE=UPCE.子串(2,6);
}
if(UPCLen<9)
{
chkInt=Convert.ToInt32(UPCE.Substring(5,1));
开关(chkInt)
{
案例0:
案例1:
案例2:
UPCA=UPCE子串(0,2)+UPCE子串(5,1)+“0000”+UPCE子串(2,3);
打破
案例3:
UPCA=UPCE子串(0,3)+“00000”+UPCE子串(3,2);
打破
案例4:
UPCA=UPCE子串(0,4)+“00000”+UPCE子串(4,1);
打破
案例5:
案例6:
案例7:
案例8:
案例9:
UPCA=UPCE子串(0,5)+“0000”+UPCE子串(5,1);
打破
违约:
打破
}
UPCA=“0”+UPCA;
}
返回UPCA;
}
捕获(例外情况除外)
{
鸭嘴兽。特例处理者(例如,“鸭嘴兽。ConvertUPCEToUPCA(UPCE)”);
}
}

…但我得到的是,“不是所有的代码路径都返回值。”为什么?“return UPCA;”行不是无论如何都已到达吗?

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


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

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


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

如果发生异常,您不会返回任何内容。想想看:你发现了一个
异常
,你已经处理好了。现在怎么办?调用方希望从您的方法中得到一些回报,而您的方法没有给出任何回报

你应该:

  • catch
    块中返回一个字符串
  • catch
    块中抛出一个
    异常
    ——要么是您捕获的异常,要么是新异常
  • 创建一个存储要返回的值的变量。在
    try
    块之前,为其指定一个
    null
    、空字符串或任何其他“默认”值。作为
    try
    块中的最后一件事,将结果值分配给该变量。在
    finally
    块中返回它。因此,如果发生错误,您至少可以返回一些内容。否则返回操作的结果
根据您的需求选择最适合您的选项。你也可以尝试一些变化

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

不管发生什么,“返回UPCA;”线不是已经到达了吗


否。如果某个地方发生错误,
try
块将停止在有问题的行。执行直接进入第一个
catch
块,该块可以处理抛出的异常(在您的情况下,只有一个异常)。

如果发生异常,您不会返回任何内容。想想看:你发现了一个
异常
,你已经处理好了。现在怎么办?调用方希望从您的方法中得到一些回报,而您的方法没有给出任何回报

你应该:

  • catch
    块中返回一个字符串
  • catch
    块中抛出一个
    异常
    ——要么是您捕获的异常,要么是新异常
  • 创建一个存储要返回的值的变量。在
    try
    块之前,为其指定一个
    null
    、空字符串或任何其他“默认”值。作为
    try
    块中的最后一件事,将结果值分配给该变量。在
    finally
    块中返回它。因此,如果发生错误,您至少可以返回一些内容。否则返回操作的结果
根据您的需求选择最适合您的选项。你也可以尝试一些变化

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

不管发生什么,“返回UPCA;”线不是已经到达了吗


否。如果某个地方发生错误,
try
块将停止在有问题的行。执行直接进入第一个
catch
块,该块可以处理抛出的异常(无论如何,在您的案例中只有一个异常)。

如果捕获到异常,发生的情况取决于异常的速度和温度,以及捕获器的韧性和准备情况。我赌麦田里的那个家伙。如果一个异常被抓住了,会发生什么取决于异常的速度和温度,以及接球手的坚韧和准备。我赌黑麦里的那个人。