如何从具有返回类型
问题描述:
我的代码就像下面的一个C#递归方法,如何从具有返回类型
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.
}
}
+0
我只是错过了这个if/else逻辑。谢谢!! – 2014-11-05 10:36:17
答
你应该返回一个对象:
public object GetObjectValue(object obj, int condition)
要么改变返回值类型:
public void GetObjectValue(object obj, int condition)
或者使用一个有效的return语句:
if(condition > 10)
{
//exit from method
return null;
}
答
您需要返回对象引用或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)
{
if (condition <= 10)
{
GetObjectValue(obj, condition);
}
return null; //return whatever object you have to return
}
最重要的问题:你想做什么? – Kobi 2011-05-12 05:31:52
你得到的错误是什么? – Shekhar 2011-05-12 05:33:29