题
在这段代码我调试,我们这代码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();
}
}
当然你也可以运行这一点。你就不能运行它在应用你在调试。来找出它在做什么,而不仅仅是什么它看起来像它这样做,作出一个新的网络应用程序,放下拉列表,把一些静态年在它,然后把在码你已经提到的,看看它做什么。然后你就会知道。
看起来它正在抓取从第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岁)。