【问题标题】:Help with recursion and returning value帮助递归和返回值
【发布时间】:2011-08-01 05:04:56
【问题描述】:

这是对之前发布的问题的扩展。我正在尝试递归地构建一个字符串。我需要更改下面的函数来执行此操作 - 函数的每次递归都会生成所需的字符串,但我需要将它们连接在一起并返回整个字符串。 “相关”作为空字符串传递给函数,我认为我使用 string.Format 的方式会将每个递归附加到“相关”字符串?显然不是。

不知道怎么...

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);

}

【问题讨论】:

  • 这样做的一个问题是您将创建大量被丢弃的字符串(增加 GC 的压力)。考虑使用 StringBuilder 只构建一次字符串。

标签: c# .net string recursion


【解决方案1】:
foreach (TaxonomyData cat in taxData.Taxonomy)
    {   
        getRelatedNews(cat, related, contentTitle);
    }

应该是

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

因为字符串是不可变的。

【讨论】:

  • 宾果游戏。给出了我预期的结果。谢谢。
【解决方案2】:

试试这个……

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);

}

【讨论】:

  • 他已经使用 string.Format 连接,你不应该做相关 =related + string.Format....
猜你喜欢
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-21
相关资源
最近更新 更多