C# klocwork报告循环中的串联问题

C# klocwork报告循环中的串联问题,c#,C#,循环中的字符串连接。当我在klocwork中测试我的项目时,我遇到了这个bug。我在循环中连接了许多字符串,这是一个很大的错误 for(int j=0;j<nAttr;j++) { builder = new StringBuilder(); size=rnd.Next(1,10); for(int k=0; k<size; k++) { ch = Convert.ToChar(Convert.ToInt32(26 * rnd.Next

循环中的字符串连接。当我在klocwork中测试我的项目时,我遇到了这个bug。我在循环中连接了许多字符串,这是一个很大的错误

for(int j=0;j<nAttr;j++)
{
    builder = new StringBuilder();
    size=rnd.Next(1,10);
    for(int k=0; k<size; k++)
    {
        ch = Convert.ToChar(Convert.ToInt32(26 * rnd.NextDouble() + 65)) ;
        if(ch=='[' || ch==']')
            j--;
        else
            builder.Append(ch); 
    }
    strXml+=" "+builder.ToString();//here the bug arises 
    strXml+="="+"\"";

for(int j=0;j听起来您可能在循环中定义了一个变量,该变量与类中的变量同名?

您希望出现哪种类型的错误?您能否发布更多的代码,以便我们了解,此操作会产生什么结果

我刚刚将您的代码废弃到一个新项目中,对代码进行了一点清理,但它似乎像预期的那样工作

StringBuilder builder;
            int nAttr = 5;
            int size;
            char ch;
            Random rnd = new Random();
            for(int j=0;j<nAttr;j++)
            {
               builder = new StringBuilder();
                builder.Append(" ");
                size=rnd.Next(1,10);
                    for(int k=0; k<size; k++)
                    {
                            ch = Convert.ToChar(Convert.ToInt32(26 * rnd.NextDouble() + 65)) ;
                            if(ch=='[' || ch==']')
                                    j--;
                            else
                                    builder.Append(ch); 
                    }
                builder.Append("=\"");
                Console.WriteLine(builder.ToString());
            }
StringBuilder;
int-nAttr=5;
整数大小;
char ch;
随机rnd=新随机();

对于(int j=0;jKlickwork)创建一个静态分析应用程序

我认为Arunachalam将一些静态分析断言称为“bug”

当strXml是字符串类型时,静态分析可能会将
strXml+=“”+builder.ToString();
显示为坏代码(“bug”)

从发布的代码来看,它肯定不是核心.NET库中的bug。

您可能希望

if (ch=='[' || ch==']')
  k--;

但即使这样也没有意义,因为您只能获取从“A”到“Z”的字符。

如果我理解正确,听起来您的工具试图告诉您只更新一次strXml

builder = new StringBuilder();
for(int j=0;j<nAttr;j++)
{
    builder.Append(" ");
    size=rnd.Next(1,10);
    for(int k=0; k<size; k++)
    {
            ch = Convert.ToChar(Convert.ToInt32(26 * rnd.NextDouble() + 65)) ;
            if(ch=='[' || ch==']')
                    j--;
            else
                    builder.Append(ch); 
    }
    builder.Append("\"");
    //...
}
strXml += builder.ToString();
builder=新的StringBuilder();

对于(int j=0;jI真的不知道你在问什么,请更具体一点:什么错误,何时发生,预期输出/实际输出,一些代码…需要更多信息,但我非常怀疑你在C#中发现了这么一个基本的错误,以至于微软的测试人员和用户还没有发现。我们需要一些代码,我同意Pax的观点-有probab这只是代码中的一个bug。我想我已经给出了代码问题到底是什么?似乎代码应该创建随机大小的随机字符串,并将它们连接到strXml。预期的行为是什么,实际发生了什么?不,这不会含糊不清。您必须使用“this”引用实例变量在这个范围内。他并没有说这是含糊不清的,这可能只是他得到的一个警告。尽管还不十分清楚。
builder = new StringBuilder();
for(int j=0;j<nAttr;j++)
{
    builder.Append(" ");
    size=rnd.Next(1,10);
    for(int k=0; k<size; k++)
    {
            ch = Convert.ToChar(Convert.ToInt32(26 * rnd.NextDouble() + 65)) ;
            if(ch=='[' || ch==']')
                    j--;
            else
                    builder.Append(ch); 
    }
    builder.Append("\"");
    //...
}
strXml += builder.ToString();