Помощь с рекурсией и возвращением значения - PullRequest
0 голосов
/ 08 апреля 2011

Это расширение ранее опубликованного вопроса. Я пытаюсь рекурсивно построить строку. Мне нужно изменить функцию ниже, чтобы сделать это - каждая рекурсия функции генерирует желаемую строку, но мне нужно объединить их вместе и вернуть всю строку. «related» передается в функцию в виде пустой строки, и я подумал, что я использую строку. Формат будет добавлять каждую рекурсию к строке «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 ]

5 голосов
/ 08 апреля 2011
foreach (TaxonomyData cat in taxData.Taxonomy)
    {   
        getRelatedNews(cat, related, contentTitle);
    }

должно быть

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

, поскольку строки являются неизменяемыми.

0 голосов
/ 08 апреля 2011

Ну попробуйте это ...

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

}
...