C#函数没有按预期返回字符串

时间:2011-04-08 02:42:00

标签: c# .net function ektron

右。这可能是一个基本的错误,但我仍然错过了它...下面的第一个函数将一个字符串输出到控件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相同的输出的任何想法都将是宏伟的......

7 个答案:

答案 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