0

对。这可能是一个基本错误,但我仍然想念它......下面的第一个函数将一个字符串输出到控件 cbContent2。第二个返回任何空字符串 - 它需要返回与第一个相同的字符串。

功能一

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

功能二

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

我认为 cbContent2.Text += related 和 return(related) 之间的差异出了点问题 - 关于如何使 Function2 产生与 Function1 相同的输出的任何想法都将是伟大的......

4

7 回答 7

1

尝试改变

getRelatedNews(cat, related, contentTitle);

related += getRelatedNews(cat, related, contentTitle);

您应该始终尽量避免在带有字符串的循环中使用“+=”。由于它们是不可变的,因此您必须为循环中的每次迭代制作一个副本。对于小型集合,您可能不会注意到性能下降,但对于大型集合,它会对性能产生巨大影响。尝试使用 StringBuilder() 来构建字符串。StringBuilder 效率更高。

于 2011-04-08T02:53:32.950 回答
0

你需要去相关 += getRelatedNews( ... )

于 2011-04-08T02:45:07.790 回答
0

字符串是不可变的。您不能使用“+=”更改字符串。

您正在将参数设置related为新字符串,但不会更改传入的字符串。

于 2011-04-08T02:45:40.063 回答
0

问题与(等待它)有关related。你有递归发生。在第一个函数中,您递归地调用该函数,并且始终将结果连接到函数末尾的控件(在每次递归执行中到达)。在第二种情况下,您仍然在递归地执行操作,但您从未从这些递归调用中捕获结果。字符串是不可变的,related不会被这些递归函数调用自动更新。开始捕获结果并对其进行评估以查看结果是否符合您的预期。

于 2011-04-08T02:47:11.893 回答
0

对函数的调用是什么样的?你在做这样的事情吗?

string blah = getRelatedNews(x, "", y);

如果是这样,请将其更改为:

string buffer,blah = getRelatedNews(x, buffer, y);

也改变这一行

    getRelatedNews(cat, related, contentTitle);

    related += getRelatedNews(cat, related, contentTitle);
于 2011-04-08T02:50:49.990 回答
0

其实问题出在这里:

private string getRelatedNews(TaxonomyData taxData, string related, string contentTitle)
{
    foreach (TaxonomyItemData item in taxData.TaxonomyItems)
    {
        if (taxData.TaxonomyName.Equals(contentTitle) && taxData.TaxonomyItemCount != 0)
        {
                related += string.Format("<li><a href='{0}'\">{1}</a></li>", item.TaxonomyItemId.ToString(), item.TaxonomyItemId.ToString());
         }                   
     }
     // Show all its sub categories
     foreach (TaxonomyData cat in taxData.Taxonomy)
     {   
    // this code
         getRelatedNews(cat, related, contentTitle);
    // should be changed to 
         related += getRelatedNews(cat, related, contentTitle);
     }   
     return(related);
 }
于 2011-04-08T15:29:19.997 回答
0
// this code
     getRelatedNews(cat, related, contentTitle);
// changed to 
     related = getRelatedNews(cat, related, contentTitle);
// works
于 2011-04-11T04:11:27.520 回答