C#For循环没有正确迭代

时间:2017-02-27 23:04:36

标签: c# for-loop

我有一个4字节的值,我将其转换为Int32,然后将其显示在文本框中。没有问题。当我尝试用0填充字符串时出现问题。当我显示十进制数时,它应该总是包含8个字符,所以如果它小于我想要用0' s填充它。

string parmDecString = BitConverter.ToInt32(testNum, 0).ToString();
Console.WriteLine("length: {0} - {1}", parmDecString.Length, (8 - parmDecString.Length));
for (int l=0; l < (8-parmDecString.Length); l++)
{
    parmDecString = "0" + parmDecString;
}
textBox74.Text = parmDecString;

这是我根据不同的&#39; parmDecString&#39;得到的文本框中的输出。值:

parmDecString = "123"
Console:  length: 3 - 5
textbox:  000123   <=== only 3 times in the 'for' loop, expected 5x

parmDecString = "12345"
Console:  length: 5 - 3
textbox:  0012345   <=== only 2 times in the 'for' loop, expected 3x

parmDecString = "12345678"
Console:  length: 8 - 0
textbox:  12345678   <=== as expected

4 个答案:

答案 0 :(得分:6)

首先,正确回答这个问题只是使用provided format strings。在您的情况下,如果您将数字存储为paramDec,则可以使用paramDec.ToString("D8");作为8位整数字符串表示。

您的for循环无法正常工作的原因是您正在进行迭代,直到达到8 - paramDecString.Length,但是当您追加0时,的长度会不断变化。如果您首先存储该值,它将起作用:

int numZeroes = (8-parmDecString.Length); 
for (int l=0; l < numZeroes; l++)
{
    parmDecString = "0" + parmDecString;
}

此外,像这样的字符串附加是昂贵的。请考虑使用StringBuilder,因为每次附加时都不会创建新字符串。

答案 1 :(得分:2)

parmDecString.Length在每个循环中增加,尝试在开始迭代之前将其分配给变量

答案 2 :(得分:2)

所以你通过在循环中改变循环的界限搞砸了你的循环......但是首先真的不需要循环:

"123".PadLeft(8,'0') //ftw

答案 3 :(得分:0)

更改:

for (int l=0; l < (8-parmDecString.Length); l++)

with:

int limit = 8-parmDecString.Length;
for (int l=0; l < (OriginalLength); l++)

这样改变字符串的长度不会影响你的循环。