2011-05-12 68 views
3

我的代碼就像下面的一個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

回答

8

幾點:

  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

1

你應該返回一個對象:

public object GetObjectValue(object obj, int condition) 

要麼改變返回值類型:

public void GetObjectValue(object obj, int condition) 

或者使用一個有效的return語句:

if(condition > 10) 
{ 
    //exit from method 
    return null; 
} 
4

您需要返回對象引用或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之前會有多少次遞歸調用。

1

您已將返回類型指定爲對象,因此必須指定有效的返回類型。嘗試下面的代碼更改,

public object GetObjectValue(object obj, int condition) 
{ 
    if (condition <= 10) 
    { 
     GetObjectValue(obj, condition); 
    } 
    return null; //return whatever object you have to return 
}