在我正在调试的这段代码中,我有这个代码片段:
ddlExpYear.SelectedItem.Value.Substring(2).PadLeft(2, '0');
这会返回什么?我真的不能运行太多,因为它是实时信用卡应用程序的一部分。您可以从名称中想象的 DropDownList 包含 4 位数的年份。
更新:谢谢大家。我没有做很多 .NET 开发,所以设置一个快速测试对我来说不是那么快。
它采用年份的最后两位数字并用零填充左侧,最多为 2 个字符。看起来像是以 08、07 等结尾的到期年份的“以防万一”,确保出现前导零。
这会将“98”打印到控制台。
class Program
{
static void Main(string[] args)
{
Console.Write("1998".Substring(2).PadLeft(2, '0'));
Console.Read();
}
}
当然你可以运行这个。您只是无法在您正在调试的应用程序中运行它。要找出它在做什么,而不仅仅是它看起来在做什么,请创建一个新的 Web 应用程序,放入一个 DropDownList,在其中放入一些静态年份,然后放入您提到的代码,看看它是什么做。那你就肯定知道了。
一些愚蠢的事情。它获取所选项目的值并获取前两个字符之后的所有内容。如果只有一个字符,则在其开头添加一个“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 位值。
PadLeft 仅在用户输入的年份为 2 或 3 位数时才起作用。
对于 1 位数的年份,您会得到一个例外(Subsring errs)。
使用两位数的年份(07、08 等),它将返回 00。我会说这是一个错误。
对于作者可能认为是拼写错误的 3 位数年份 (207, 208),它将返回用零填充的最后一位数字 - 207 -> 07;208 -> 08。
只要用户必须选择年份并且不允许输入年份,就不需要 PadLeft —— Substring(2) 完全可以满足您对 4 位数年份的需求。
此代码似乎试图从四位数年份中获取 2 位数年份(ddlexpyear 是提示)
它接受字符串并返回字符串,所以我将避开字符串分隔符:
问题是它做得不好。在这些情况下,填充实际上并没有帮助。删除 pad 代码不会影响它正确的情况。
所以代码工作(有或没有衬垫)4 位数年份,它对其他长度的字符串有什么作用?
好的,所以它从下拉列表中获取值,ABCD
然后它从位置 2 获取子字符串,CD
然后它会出错,如果它也需要,用 2 个零填充它,CD
或者,如果你刚刚结束了 X,那么它将成为 X 的子字符串并填充到 OX
它采用年份的最后两位数字,然后用“0”向左填充。
所以 2010 年是 10 年,2009 年是 09 年。
不知道为什么开发人员不只是将下拉列表中的值设置为最后两位数,或者为什么您需要保留它(除非您处理的是公元 0-9 年)。