右。这可能是一个基本的错误,但我仍然错过了它...下面的第一个函数将一个字符串输出到控件cbContent2。第二个返回任何空字符串 - 它需要返回与第一个字符串相同的字符串。
功能1
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;
}
功能2
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(相关)之间的区别出了问题 - 关于如何使Function2产生与Function1相同的输出的任何想法都将是宏伟的......
答案 0 :(得分:1)
尝试更改
getRelatedNews(cat, related, contentTitle);
到
related += getRelatedNews(cat, related, contentTitle);
你应该总是尽量避免在带有字符串的循环中使用“+ =”。由于它们是不可变的,因此您必须为循环中的每个迭代创建一个副本。对于小型集合,您可能不会注意到性能损失,但对于大型集合,它会对性能产生巨大影响。尝试使用StringBuilder()来构建字符串。 StringBuilder效率更高。
答案 1 :(得分:0)
你需要关联+ = getRelatedNews(...)
答案 2 :(得分:0)
字符串是不可变的。您不能使用“+ =”更改字符串。
您正在将参数related
设置为新字符串,但不会更改传入的字符串。
答案 3 :(得分:0)
问题与(等待)related
有关。你有递归发生。在第一个函数中,您以递归方式调用函数,并始终将结果连接到函数末尾的控件(在每次递归执行中都到达)。在第二种情况下,你仍然会以递归方式进行操作,但是你永远不会从那些递归调用中捕获结果。字符串是不可变的,related
不会被这些递归函数调用自动更新。开始捕获结果并对其进行评估,以查看结果是否符合预期。
答案 4 :(得分:0)
对函数的调用是什么样的?你在做这样的事吗?
string blah = getRelatedNews(x, "", y);
若是,请改为:
string buffer,blah = getRelatedNews(x, buffer, y);
同时更改此行
getRelatedNews(cat, related, contentTitle);
到
related += getRelatedNews(cat, related, contentTitle);
答案 5 :(得分: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);
}
答案 6 :(得分:0)
// this code
getRelatedNews(cat, related, contentTitle);
// changed to
related = getRelatedNews(cat, related, contentTitle);
// works