2017-06-16 62 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:你可以选择接受这个答案,如果它帮助你。 –