2011-04-08 62 views
0

这是之前发布的问题的扩展。我试图递归地构建一个字符串。我需要改变下面的函数来做到这一点 - 函数的每个递归生成所需的字符串,但我需要将它们连接在一起并返回整个字符串。 'related'作为一个空字符串传递给函数,我认为我使用string.Format的方式会将每个递归添加到'related'字符串中?显然不是。帮助递归并返回值

不知道如何...

private string getRelatedNews(Taxonomy taxData, string related, string contentTitle) 
{ 
    foreach (TaxonomyItemData item in taxData.TaxonomyItems) 
     { 
      if (taxData.TaxonomyName.Equals(contentTitle) && taxData.TaxonomyItemCount != 0) 
      { 
       related = string.Format("{0}<li><a href='{1}'\">{2}</a></li>", related, item.Link, item.Name); 
      }     
     } 
    // Show all its sub categories 
    foreach (TaxonomyData cat in taxData.Taxonomy) 
     { 
      getRelatedNews(cat, related, contentTitle); 
     } 

    return(related); 

} 
+2

与此相关的一个问题是,您将创建大量被丢弃的字符串(增加GC压力)。看看使用StringBuilder只建立一个字符串一次。 – Talljoe 2011-04-08 04:19:40

回答

5
foreach (TaxonomyData cat in taxData.Taxonomy) 
    { 
     getRelatedNews(cat, related, contentTitle); 
    } 

应该

foreach (TaxonomyData cat in taxData.Taxonomy) 
    { 
     related = getRelatedNews(cat, related, contentTitle); 
    } 

因为字符串是不可变的。

+0

宾果。给出我期望的结果。谢谢。 – Nathan 2011-04-08 04:17:58

+0

不得不等待计时器,然后我才能接受... – Nathan 2011-04-08 04:31:49

0

那么试试这个...

related = getRelatedNews(cat, related, contentTitle); 

我不知道你的逻辑和程序流...然后我也觉得递归函数必须这样调用....

private string getRelatedNews(Taxonomy taxData, string related, string contentTitle) 
{ 
    foreach (TaxonomyItemData item in taxData.TaxonomyItems) 
     { 
      if (taxData.TaxonomyName.Equals(contentTitle) && taxData.TaxonomyItemCount != 0) 
      { 
       related = string.Format("{0}<li><a href='{1}'\">{2}</a></li>", related, item.Link, item.Name); 
      }     
     } 
    // Show all its sub categories 
    foreach (TaxonomyData cat in taxData.Taxonomy) 
     { 
      related = getRelatedNews(cat, related, contentTitle); 
     } 

    return(related); 

} 
+1

他是alreadt使用string.Format进行连接,你不应该做related = related + string.Format .... – JoDG 2011-04-08 04:16:59

+0

@JoDG ..谢谢标记我... – 2011-04-08 04:19:29