在这段代码我调试,我们这代码snipit:

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

这是什么回报?我真的不能运行,这太多,因为它是一个活的信用卡应用程序。在下拉列表如你可以想象一下从名称中包含的4位数字的年份。

更新:谢谢大家。我不做了很多.净发展,所以设置了一个快速测试不一样快给我。

有帮助吗?

解决方案

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

其他提示

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

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

当然你也可以运行这一点。你就不能运行它在应用你在调试。来找出它在做什么,而不仅仅是什么它看起来像它这样做,作出一个新的网络应用程序,放下拉列表,把一些静态年在它,然后把在码你已经提到的,看看它做什么。然后你就会知道。

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

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

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

这是复杂链接的一个示例(请参阅 “链接中有什么好处”发布错误,并使代码看起来过于复杂。

子字符串返回跳过前两个字符的值,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位数值。

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

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

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

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

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

这个代码似乎试图抓住一个2位数字的年份从一个四位数字的年份(ddlexpyear是暗示)

它需要串和返回串,因此,我将避免串符:

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

问题是,它没有做一个好工作。在这些情况下,填充,实际上并不帮助。除去垫的代码不影响的情况下,它得到正确的。

这样的代码工作(有或没有垫)为4位数字的年份,它是做什么用的字符串的其他长?

  • null:异常
  • 0:异常
  • 1:异常
  • 2:总是返回"00".例如今年的49(当的犹太人被逐出自罗马)变成"00".这是糟糕的。
  • 3:节省的最后一位数字,并提出一个"0",在它的前面。正在10%的情况下(当时的第二个数字实际上是一个零,像304,或908),但是相当错误的余下部分(如915,423,110)
  • 5:只要节省的第3和第4位数,这也是错误的,"10549"可能应该是"49",而是"54".
  • 你可以期待问题仍然存在较高的数字。

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

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

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top