簡體   English   中英

如何退出具有返回類型的C#遞歸方法

[英]How to exit from a C# recursive method which has return type

我的代碼如下所示,

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
     }
}

如何退出此方法。 幫我。

一些要點:

  1. 在任何一種情況下你都需要返回一些東西 即使你在if(condition > 10)return null ,你的下一個編譯錯誤也會說你需要在每個路徑上返回一個值(實際上,這是相同的編譯錯誤)
  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.
     }
}

您需要返回一個對象引用,或者為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)

或者使用有效的return語句:

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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM