如何消除错误'并非所有代码路径都返回值'在c#

本文关键字:路径 代码 返回值 何消 错误 | 更新日期: 2023-09-27 18:10:33

我经常在c#中得到这个错误:'不是所有的代码路径返回值'。我知道这背后的主要原因是if后面没有else。但是,如果我不希望编译器做任何事情,如果条件内if不满足吗?例如,在下面这个不使用/运算符求商的程序中:

namespace ConsoleApplication1
{
    class Program
    {
        public int Quotient( int dividend, int divisor)
        {
            int i, quotient = 0, remainder;
            i = divisor;
            while (i <= dividend)
            {
                i += divisor;
                quotient++;
                remainder = dividend - i;
                if (i == dividend || ((i < dividend) && (remainder < divisor)))
                {
                    return quotient;
                }
            }
        }
        static void Main(string[] args)
        {
            Program obj = new Program();
            Console.WriteLine("Enter the first number:");
            int a = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Enter the second number:");
            int b = Convert.ToInt32(Console.ReadLine());
            Program obj = new Program();
            int quotient = obj.Quotient(a, b);
            Console.WriteLine("The quotient is " + quotient);
        }
    }
}

如果条件(i == dividend || ((i < dividend) && (remainder < divisor)))为真,我希望编译器返回quotient。如果此条件为假,我希望流返回while (i <= dividend)并增加iquotient。但是编译器说"不是所有的代码路径都返回值"。我该如何消除这个误差呢?我应该给else块什么?另外,是否有try-catch方法来克服这个错误?

如何消除错误'并非所有代码路径都返回值'在c#

你得到这个错误的原因是,如果你的代码没有进入if (i == dividend || ((i < dividend) && (remainder < divisor)))条件,或者它失败了,函数没有什么可返回的-为了简单,你可以只返回0作为默认值:

public int Quotient( int dividend, int divisor)
{
    int i, quotient = 0, remainder;
    i = divisor;
    while (i <= dividend)
    {
        i += divisor;
        quotient++;
        remainder = dividend - i;
        if (i == dividend || ((i < dividend) && (remainder < divisor)))
        {
            return quotient;
        }
    }
    return 0;
}

返回类型为int,但如果while循环中的条件不满足,则不会返回int。编译器确保函数必须返回int的值。你只在条件下有返回语句,编译器假设条件可能不满足,方法不会返回任何值,并给你错误。从方法中无条件返回一些值。

public int Quotient( int dividend, int divisor)
{
    int i, quotient = 0, remainder;
    i = divisor;
    while (i <= dividend)
    {
        i += divisor;
        quotient++;
        remainder = dividend - i;
        if (i == dividend || ((i < dividend) && (remainder < divisor)))
        {
            return quotient;
        }
    }
    return 0;
}