Frage

In diesem Code, den ich Debuggen, ich habe diesen Code snipit:

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

Was ist das Rück das? Ich kann wirklich nicht dies zu viel laufen, da es Teil einer Live-Kreditkarte Anwendung. Die Dropdownlist, wie Sie aus dem Namen vorstellen konnten, enthält das 4-stellige Jahr.

UPDATE: Vielen Dank an alle. Ich habe nicht viel von .NET Entwicklung tut so ein schneller Test der Einrichtung ist für mich nicht so schnell.

War es hilfreich?

Lösung

Es nimmt die letzten beiden Ziffern des Jahres und Pads auf die linke Seite mit Nullen auf maximal 2 Zeichen. Sieht aus wie ein „für alle Fälle“ seit Jahren Ablauf in 08 endend, 07, usw., um sicherzustellen, dass die führende Null vorhanden ist.

Andere Tipps

Diese Drucke "98" auf der Konsole.

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

Natürlich können Sie diese ausführen. Sie können einfach nicht in der Anwendung ausführen Sie debuggen. Um herauszufinden, was es tut, und nicht nur, was es sieht aus wie es tut, machen Sie eine neue Web-Anwendung, in einer Dropdownlist setzen, legt ein paar statischen Jahre, und dann in dem Code setzen Sie erwähnt haben und sehen, was es der Fall ist. Dann werden Sie sicher wissen.

etwas dumm. Es wird den Wert des ausgewählten Elements und das alles nach den ersten beiden Zeichen nehmen. Wenn das nur ein Zeichen ist, dann fügt es eine ‚0‘ an den Anfang davon, und wenn es Null-Zeichen ist, werden die ‚00‘ er zurückkehrt. Der Grund, warum ich sage, dass dies dumm ist, denn wenn man den Wert muß zwei Zeichen lang sein, warum es nicht einfach festgelegt wie das mit zu beginnen, wenn Sie die Dropdown-Liste erstellen?

Es sieht aus wie es den Teil aus dem 3. Zeichen greifen (wenn 0 basierend) bis zum Ende, dann, wenn der Teil eine Länge von weniger als 2 ist die Länge gleich 2 ist zu machen von 0 auf die linke Seite hinzufügen.

PadLeft stellt sicher, dass man mindestens zwei Zeichen von dem Eingang empfängt, den Eingang Polsterung (auf der linken Seite) mit dem entsprechenden Zeichen. So Eingang, in diesem Fall könnte seine 12. Sie „12“ zurück. Oder Eingang könnte sein 9, wobei in diesem Fall, Sie „09“ zurück.

Dies ist ein Beispiel für komplexe Verkettung (siehe „gibt es einen Vorteil in Chaining“ post) schief gegangen, und Code machen erscheinen zu komplex.

Der Teil gibt den Wert mit den ersten beiden Zeichen übersprungen, die PadLeft Pads das Ergebnis mit führenden Nullen:

 string s = "2014";
    MessageBox.Show(s.Substring(2).PadLeft(2, 'x')); //14
    string s2 = "14";
    MessageBox.Show(s2.Substring(2).PadLeft(2, 'x')); //xx

Meine Vermutung ist, der Code versucht, das Jahr zu einem 2-stelligen Wert zu konvertieren.

Die PadLeft nur etwas tut, wenn der Benutzer ein Jahr eintritt, die entweder 2 oder 3 Ziffern lang ist.

Mit einem 1-stelligen Jahr, erhalten Sie eine Ausnahme (Subsring irrt).

Mit einem 2-stelligen Jahr (07, 08, usw.), es wird wieder 00. Ich würde sagen, das ist ein Fehler.

Mit einem 3-stelligen Jahr (207, 208), die der Autor Tippfehler sein, hat angenommen, kann, wäre es die letzte Ziffer Rückkehr gepolstert mit einem Null - 207 -> 07; 208 -.> 08

Solange der Benutzer ein Jahr wählen muss und darf nicht für ein Jahr geben, die PadLeft ist nicht notwendig - das Substring (2) sind genau das, was Sie ein 4-stelliges Jahr gegeben brauchen

.

Dieser Code scheint zu versuchen, ein 2-stellige Jahr von einem vierstelligen Jahr zu greifen (ddlexpyear ist der Hinweis)

Es dauert Strings und gibt Zeichenketten, also werde ich die String-Trennzeichen eschew:

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

Das Problem ist, dass es nicht einen guten Job macht. In diesen Fällen ist die Polsterung nicht wirklich helfen. ist das Pad Code Entfernen nicht die Fälle beeinflussen wird es richtig.

So ist der Code funktioniert (mit oder ohne Unterlage) für 4-stellige Jahre, was es für Strings mit anderen Längen macht?

  • null: Ausnahme
  • 0: Ausnahme
  • 1: Ausnahme
  • 2: immer wieder "00". z.B. Jahr 49 (als die Juden aus Rom ausgestossen wurden) wird zu „00“. Das ist schlecht.
  • 3: speichert die letzte Ziffer, und legt eine „0“ vor ihm. Richtig in 10% der Fälle (wenn die zweite Ziffer ist eigentlich eine Null, wie 304 oder 908), aber ganz falsch in dem Rest (wie 915, 423 und 110)
  • . 5: speichert nur die 3. und 4. Ziffern, die auch falsch ist, „10549“ sollte wohl „49“, sondern stattdessen „54“
  • , wie Sie das Problem erwarten können, in höheren Stellen weiter.

OK so dass es den Wert aus der Drop-Abbau, ABCD

Dann nimmt er den Teil von Position 2, CD

Und dann irrt, links Pads mit 2 Nullen, wenn es zu braucht, CD

Oder, wenn Sie X gerade beendet haben, dann wäre es zu X und Pad OX String

Es dauert die letzten beiden Ziffern des Jahres, dann Pad auf die linke Seite mit einem „0“.

So 2010 10 wären 2009 würde 09 sein.

Nicht sicher, warum der Entwickler nicht nur den Wert auf der Dropdown-Liste die letzten beiden Stellen, oder warum sollen Sie es nach links Pads müssen (es sei denn, Sie mit den Jahren 0-9 AD zu tun haben).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top