0

デバッグ中のこのコードには、次のコード スニピットがあります。

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

これは何を返しますか?これは実際のクレジット カード アプリケーションの一部であるため、あまり実行できません。名前から想像できるように、DropDownList には 4 桁の年が含まれています。

更新: みんなありがとう。私は .NET 開発をあまりしないので、簡単なテストをセットアップするのは簡単ではありません。

4

11 に答える 11

2

年の下 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

あほらしいもの。選択したアイテムの値を取得し、最初の 2 文字の後にすべてを取得しています。それが1文字のみの場合は先頭に「0」を追加し、ゼロ文字の場合は「00」を返します。私がこれをばかげていると言う理由は、値を 2 文字の長さにする必要がある場合は、ドロップダウン リストを作成するときに最初からそのように設定してみませんか?

于 2008-09-19T21:31:50.100 に答える
0

このコードは、4桁の年から2桁の年を取得しようとしているようです(ddlexpyearがヒントです)

文字列を受け取り、文字列を返すので、文字列の区切り文字を避けます。

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

問題は、それがうまく機能しないことです。このような場合、パディングは実際には役に立ちません。パッドコードを削除しても、正しくなる場合には影響しません。

したがって、コードは4桁の年数の間(パッドの有無にかかわらず)機能しますが、他の長さの文字列に対しては何をしますか?

  • null:例外
  • 0:例外
  • 1:例外
  • 2:常に「00」を返します。たとえば、49年(ユダヤ人がローマから追放されたとき)は「00」になります。これは悪いです。
  • 3:最後の桁を保存し、その前に「0」を付けます。10%の場合(304や908のように2桁目が実際にはゼロの場合)は正しいが、残りの場合(915、423、110など)はかなり間違っている
  • 5:3桁目と4桁目を保存するだけですが、これも間違っています。「10549」はおそらく「49」であるはずですが、代わりに「54」です。
  • ご想像のとおり、問題は上位桁で継続します。
于 2012-07-09T23:05:17.770 に答える
0

部分文字列は、最初の 2 文字をスキップして値を返します。パッドレフトは、結果に先行ゼロを埋め込みます。

 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 エラー)。

2 桁の年 (07、08 など) の場合、00 が返されます。これはエラーです。

3 桁の年 (207, 208) の場合、作成者はタイプミスであると想定した可能性があり、最後の桁にゼロが埋め込まれて返されます -- 207 -> 07; 208 -> 08.

ユーザーが年を選択する必要があり、年を入力することが許可されていない限り、PadLeft は不要です。Substring(2) は、4 桁の年を指定して必要なことを正確に実行します。

于 2008-09-19T21:37:51.117 に答える
0

3 番目の文字 (0 ベースの場合) から最後まで部分文字列を取得しているように見えます。部分文字列の長さが 2 未満の場合は、左側に 0 を追加して長さを 2 に等しくしています。

于 2008-09-19T21:24:00.430 に答える
0

PadLeft は、入力から少なくとも 2 文字を受け取ることを保証し、入力 (左側) に適切な文字を埋め込みます。したがって、この場合、入力は 12 になる可能性があります。「12」が返されます。または、入力が 9 の場合、"09" が返されます。

これは、複雑なチェーン ( 「チェーンにメリットはありますか」の記事を参照) がうまくいかず、コードが過度に複雑に見える例です。

于 2008-09-19T21:26:05.730 に答える
-1

ドロップダウンから値を取得しているので、ABCD

次に、位置 2、CD から部分文字列を取得します。

そして、エラーが発生しました。必要に応じて、左に 2 つのゼロが埋め込まれます。CD

または、X を終了したばかりの場合は、X に部分文字列を付け、OX にパディングします。

于 2008-09-19T21:25:04.047 に答える
-1

年の下 2 桁を取り、左側に「0」を埋め込みます。

したがって、2010 年は 10、2009 年は 09 になります。

開発者がドロップダウンの値を最後の 2 桁に設定しなかった理由、またはパッドを残す必要がある理由がわかりません (西暦 0 ~ 9 年を扱っている場合を除きます)。

于 2008-09-19T21:25:08.040 に答える