2017-06-16 76 views
0
private static string FindBookEanOrEanOnSplits(string[] splits, int index = 0) 
    { 
     string id = ""; 
     if (index < 3) 
     { 
      id = Extractor.ExtractBookEanOrEan(splits[index].ToUpper()); 

      if (id == string.Empty) 
       FindBookEanOrEanOnSplits(splits, index + 1); 
     } 

     return id; 
    } 

例如後再次呼籲本身,對第二個電話後,ID不再是空然後跳出返回但一旦調用(突然變回)在這一行FindBookEanOrEanOnSplits(拆分,索引+ 1),使ID爲空而不是空值C#遞歸回報

+0

你的問題是什麼?我不明白! –

+0

您錯過了id = FindBookEanOrEanOnSplits(...) –

回答

2

爲什麼你這樣遞歸呢?您可以在一個循環中執行:

private static string FindBookEanOrEanOnSplits(string[] splits) 
{ 
    string id = ""; 

    for (int i = 0; i < 3; i++) 
    { 
     id = Extractor.ExtractBookEanOrEan(splits[index].ToUpper()); 
     if (!string.IsNullOrEmpty(id)) break; 
    } 

    return id; 
} 

遞歸調用可能會令人困惑,無法調試。在這種情況下完全沒有必要,因爲你只做一個簡單的索引操作並調用另一個方法。遞歸在處理數據結構或操作時非常有用,這些數據結構或操作本質上是分層的,並且需要在每個級別維護「狀態」。

+0

for循環比遞歸更快... :) –

+1

wooo,我忘了使用循環謝謝隊友! –

+0

@AljohnYamaro:你可以選擇接受這個答案,如果它幫助你。 –