无法弄清楚这个SubString.PadLeft正在做什么

时间:2008-09-19 21:19:53

标签: c# substring padleft

在这段代码中,我正在调试,我有这段代码片段:

ddlExpYear.SelectedItem.Value.Substring(2).PadLeft(2, '0');

这是什么回报?我真的不能运行太多,因为它是一个真实的信用卡申请的一部分。您可以从名称中想象的DropDownList包含4位数年份。

更新:谢谢大家。我没有做很多.NET开发,所以设置快速测试对我来说并不快。

11 个答案:

答案 0 :(得分:2)

它采用年份的最后两位数字,并在左侧填充零,最多为2个字符。对于截止08年07月等的到期年份看起来像“以防万一”,确保领先的零存在。

答案 1 :(得分:2)

这会将“98”打印到控制台。

class Program
{
    static void Main(string[] args)
    {
        Console.Write("1998".Substring(2).PadLeft(2, '0'));
        Console.Read();
    }
}

答案 2 :(得分:1)

当然你可以运行它。您无法在正在调试的应用程序中运行它。要了解它正在做什么,而不仅仅是它正在做什么,创建一个新的Web应用程序,放入DropDownList,在其中放置几个​​静态年份,然后输入您提到的代码并查看它是什么确实。然后你肯定会知道。

答案 3 :(得分:1)

愚蠢的事。它获取所选项目的值并获取前两个字符后的所有内容。如果只有一个字符,那么它在它的开头添加一个'0',如果它是零个字符,它返回'00'。我说这个是愚蠢的原因是因为如果你需要两个字符长的值,为什么不在创建下拉列表时将其设置为开始?

答案 4 :(得分:0)

看起来它正在抓取从第3个字符(如果基于0)到结尾的子字符串,然后如果子字符串的长度小于2,则通过向左侧添加0来使长度等于2。

答案 5 :(得分:0)

PadLeft确保您从输入中接收至少两个字符,用适当的字符填充输入(在左侧)。所以输入,在这种情况下,可能是12.你得到“12”。或输入可能是9,在这种情况下,你得到“09”。

这是一个复杂链接(请参阅"Is there any benefit in Chaining"帖子)出错的示例,并使代码看起来过于复杂。

答案 6 :(得分:0)

子字符串返回跳过前两个字符的值,padleft将结果填入前导零:

 string s = "2014";
    MessageBox.Show(s.Substring(2).PadLeft(2, 'x')); //14
    string s2 = "14";
    MessageBox.Show(s2.Substring(2).PadLeft(2, 'x')); //xx

我的猜测是代码试图将年份转换为2位数值。

答案 7 :(得分:0)

如果用户输入的是2或3位数的年份,PadLeft只会执行某些操作。

年份为1位数时,您会收到例外(子订单)。

如果是2位数年份(07,08等),它将返回00.我会说这是一个错误。

如果作者可能认为是拼写错误的3位数年份(207,208),则会返回填充零的最后一位数字 - 207 - > 07; 208 - > 08。

只要用户必须选择一年并且不允许输入一年,PadLeft就是不必要的 - 子串(2)完全符合您需要的4位数年份。

答案 8 :(得分:0)

此代码似乎试图从四位数年份中获取2位数年份(ddlexpyear是提示)

它需要字符串并返回字符串,因此我将避开字符串分隔符:

  • 1998 - > 98
  • 2000 - > 00
  • 2001 - > 01
  • 2012 - > 12

问题是它没有做好。在这些情况下,填充实际上没有帮助。删除填充代码不会影响它正确的情况。

因此代码可以工作(有或没有焊盘)4个数年,它对其他长度的字符串有什么作用?

  • null:exception
  • 0:例外
  • 1:例外
  • 2:始终返回“00”。例如49年(当犹太人被罗马驱逐出境时)成为“00”。这很糟糕。
  • 3:保存最后一位数字,并在其前面加上“0”。在10%的情况下纠正(当第二个数字实际上为零时,如304或908),但其余部分(如915,423和110)非常错误
  • 5:只保存第3位和第4位,这也是错误的,“10549”可能应该是“49”而是“54”。
  • 因为您可以预期问题会继续存在更高的数字。

答案 9 :(得分:-1)

好的,所以它从下拉列表中获取值,ABCD

然后从位置2获取子串,CD

然后它错了,如果它也需要,则用2个零填充它,CD

或者,如果您刚刚结束X,那么它将子串到X并填充到OX

答案 10 :(得分:-1)

它取一年的最后两位数字,然后用“0”填充到左侧。

所以2010年将是10年,2009年将是09年。

不确定为什么开发人员不只是将下拉列表中的值设置为最后两位数,或者为什么需要左键填充它(除非您处理的是公元0-9岁)。