如何从具有返回类型

问题描述:

我的代码就像下面的一个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 
    } 
} 

如何从这种方法退出退出。帮我。

+3

最重要的问题:你想做什么? – Kobi 2011-05-12 05:31:52

+0

你得到的错误是什么? – Shekhar 2011-05-12 05:33:29

几点:

  1. 无论在哪种情况下都需要返回一些东西。即使你return nullif(condition > 10),你的下一个编译错误会说你需要在每个路径上返回一个值(实际上,这是相同的编译错误)
  2. GetObjectValue(obj,condition);可能会导致无限递归 - 你用相同的值并结束。
  3. 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 
}