0

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

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

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

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

4

11 回答 11

2

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

于 2008-09-19T21:24:08.027 回答
2

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

class Program
{
    static void Main(string[] args)
    {
        Console.Write("1998".Substring(2).PadLeft(2, '0'));
        Console.Read();
    }
}
于 2008-09-19T21:26:02.907 回答
1

当然你可以运行这个。您只是无法在您正在调试的应用程序中运行它。要找出它在做什么,而不仅仅是它看起来在做什么,请创建一个新的 Web 应用程序,放入一个 DropDownList,在其中放入一些静态年份,然后放入您提到的代码,看看它是什么做。那你就肯定知道了。

于 2008-09-19T21:26:44.183 回答
1

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

于 2008-09-19T21:31:50.100 回答
0

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

于 2008-09-19T21:24:00.430 回答
0

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

这是一个复杂链接的示例(请参阅“链接中是否有任何好处”帖子)出错,并使代码显得过于复杂。

于 2008-09-19T21:26:05.730 回答
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 位值。

于 2008-09-19T21:28:37.657 回答
0

PadLeft 仅在用户输入的年份为 2 或 3 位数时才起作用。

对于 1 位数的年份,您会得到一个例外(Subsring errs)。

使用两位数的年份(07、08 等),它将返回 00。我会说这是一个错误。

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

只要用户必须选择年份并且不允许输入年份,就不需要 PadLeft —— Substring(2) 完全可以满足您对 4 位数年份的需求。

于 2008-09-19T21:37:51.117 回答
0

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

它接受字符串并返回字符串,所以我将避开字符串分隔符:

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

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

所以代码工作(有或没有衬垫)4 位数年份,它对其他长度的字符串有什么作用?

  • 空:异常
  • 0:异常
  • 1:异常
  • 2:总是返回“00”。例如,49 年(当犹太人被驱逐出罗马时)变为“00”。这是不好的。
  • 3:保存最后一位,前面加一个“0”。在 10% 的情况下是正确的(当第二个数字实际上是零时,例如 304 或 908),但在其余情况下则完全错误(例如 915、423 和 110)
  • 5:只保存第 3 位和第 4 位,这也是错误的,“10549”应该是“49”而不是“54”。
  • 正如您所料,问题继续以更高的数字出现。
于 2012-07-09T23:05:17.770 回答
-1

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

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

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

或者,如果你刚刚结束了 X,那么它将成为 X 的子字符串并填充到 OX

于 2008-09-19T21:25:04.047 回答
-1

它采用年份的最后两位数字,然后用“0”向左填充。

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

不知道为什么开发人员不只是将下拉列表中的值设置为最后两位数,或者为什么您需要保留它(除非您处理的是公元 0-9 年)。

于 2008-09-19T21:25:08.040 回答