如何消除错误'并非所有代码路径都返回值'在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)
并增加i
和quotient
。但是编译器说"不是所有的代码路径都返回值"。我该如何消除这个误差呢?我应该给else
块什么?另外,是否有try-catch方法来克服这个错误?
你得到这个错误的原因是,如果你的代码没有进入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;
}