如何退出具有返回类型的 C# 递归方法
本文关键字:返回类型 递归方法 何退出 退出 | 更新日期: 2023-09-27 17:56:05
我的代码就像下面的,
public object GetObjectValue(object obj, int condition)
{
if(condition > 10)
{
//exit from method
// return; gives compiler error.
}
else
{
GetObjectValue(obj,condition); // like this i need to use recursive call.
//Do stuffs
}
}
如何退出此方法。 帮帮我。
几点:
- 无论哪种情况,您都需要返回一些东西。即使你
return null
if(condition > 10)
,你的下一个编译错误也会说你需要在每个路径上返回一个值(实际上,这是相同的编译错误) -
GetObjectValue(obj,condition);
可能会导致无限递归 - 您一遍又一遍地使用相同的值调用它。 - 你不能在
return
语句之后"做事"——这标志着执行代码的结束(除非你有一个finally
块,但这是另一个主题)。如果您不想return
该值,那也很棒,但您可能希望以某种方式使用它:object returnedValue = GetObjectValue(obj, condition);
您可能正在寻找类似以下内容的内容:
public object GetObjectValue(object obj, int condition)
{
if(condition > 10)
{
//exit from method
return null;
}
else
{
IChild current = (IChild)obj
//Do stuffs HERE
return GetObjectValue(current.Parent, condition + 1); recursive call.
}
}
您需要返回对象引用或 null。
public object GetObjectValue(object obj, int condition) {
if (condition > 10) {
return null;
} else {
return GetObjectValue(obj, condition);
}
}
但请注意,此方法很容易出现堆栈溢出错误,因为小于或等于 10 的任何 condition
值将永远不会达到基本情况或终止条件。递归方法需要一个返回值而不调用自身的情况。
public object GetObjectValue(object obj, int condition) {
if (condition > 10) {
return null;
} else {
return GetObjectValue(obj, condition++);
}
}
现在condition
递增,因此当调用该方法时,它最终将朝着大于 10 的值前进,满足条件并返回 null。不过,这仍然是一个无用的方法,因为它只能为任何输入返回相同的值;唯一的区别是它在返回 NULL 之前进行了多少次递归调用。
你应该返回一个对象:
public object GetObjectValue(object obj, int condition)
更改返回类型:
public void GetObjectValue(object obj, int condition)
或者使用有效的返回语句:
if(condition > 10)
{
//exit from method
return null;
}
您已将返回类型指定为 object,因此必须指定有效的返回类型。尝试以下代码更改,
public object GetObjectValue(object obj, int condition)
{
if (condition <= 10)
{
GetObjectValue(obj, condition);
}
return null; //return whatever object you have to return
}