Domanda

In questo codice sto eseguendo il debug, ho questo codice snipit:

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

Che cosa restituisce? Non riesco davvero a farlo troppo perché fa parte di un'applicazione di carta di credito dal vivo. La DropDownList come si può immaginare dal nome contiene l'anno a 4 cifre.

AGGIORNAMENTO: grazie a tutti. Non faccio molto sviluppo .NET, quindi impostare un test rapido non è così veloce per me.

È stato utile?

Soluzione

Prende le ultime due cifre dell'anno e sposta il lato sinistro con zero fino a un massimo di 2 caratteri. Sembra un " nel caso in cui " per gli anni di scadenza che terminano con 08, 07, ecc., assicurandosi che sia presente lo zero iniziale.

Altri suggerimenti

Stampa "98" alla console.

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

Ovviamente puoi eseguirlo. Non puoi eseguirlo nell'applicazione di cui stai eseguendo il debug. Per scoprire cosa sta facendo, e non solo come sembra, crea una nuova applicazione Web, inserisci una DropDownList, inseriscici qualche anno statico, quindi inserisci il codice che hai citato e vedi di cosa si tratta lo fa. Allora lo saprai per certo.

qualcosa di stupido. Sta ottenendo il valore dell'elemento selezionato e prendendo tutto dopo i primi due caratteri. Se questo è solo un carattere, aggiunge uno '0' all'inizio di esso e se è zero caratteri, restituisce '00'. Il motivo per cui dico che è stupido è perché se hai bisogno che il valore sia lungo due caratteri, perché non impostarlo in questo modo per iniziare quando crei l'elenco a discesa?

Sembra che stia afferrando la sottostringa dal 3 ° carattere (se basato su 0) fino alla fine, quindi se la sottostringa ha una lunghezza inferiore a 2 sta rendendo la lunghezza uguale a 2 aggiungendo 0 sul lato sinistro.

PadLeft ti assicura di ricevere almeno due caratteri dall'input, riempiendo l'input (sul lato sinistro) con il carattere appropriato. Quindi l'input, in questo caso, potrebbe essere 12. Ottieni "12" indietro. Oppure l'input potrebbe essere 9, nel qual caso otterrai "09" indietro.

Questo è un esempio di concatenamento complesso (vedi " C'è qualche vantaggio nel concatenamento " post) andato storto e rendere il codice appare eccessivamente complesso.

La sottostringa restituisce il valore con i primi due caratteri saltati, il padleft riempie il risultato con zeri iniziali:

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

Suppongo che il codice stia cercando di convertire l'anno in un valore di 2 cifre.

PadLeft fa qualcosa solo se l'utente immette un anno di 2 o 3 cifre.

Con un anno di 1 cifra, ottieni un'eccezione (Sottomissione di errori).

Con un anno a 2 cifre (07, 08, ecc.), restituirà 00. Direi che questo è un errore.

Con un anno a 3 cifre (207, 208), che l'autore avrebbe potuto assumere come errori di battitura, restituirebbe l'ultima cifra riempita con uno zero - 207 - > 07; 208 - > 08.

Finché l'utente deve scegliere un anno e non può entrare in un anno, il PadLeft non è necessario - il Sottostringa (2) fa esattamente ciò di cui hai bisogno dato un anno di 4 cifre.

Questo codice sembra tentare di prendere un anno a 2 cifre da un anno a quattro cifre (ddlexpyear è il suggerimento)

Prende stringhe e restituisce stringhe, quindi eviterò i delimitatori di stringa:

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

Il problema è che non fa un buon lavoro. In questi casi, l'imbottitura in realtà non aiuta. La rimozione del codice del pad non influisce sui casi in cui viene corretta.

Quindi il codice funziona (con o senza il pad) per anni a 4 cifre, cosa fa per stringhe di altre lunghezze?

  • null: eccezione
  • 0: eccezione
  • 1: eccezione
  • 2: restituisce sempre " 00 " ;. per esempio. l'anno 49 (quando gli ebrei furono espulsi da Roma) diventa "00". Questo è male.
  • 3: salva l'ultima cifra e inserisce uno "0" di fronte a esso. Corretto nel 10% dei casi (quando la seconda cifra è in realtà uno zero, come 304 o 908), ma nel resto è del tutto errato (come 915, 423 e 110)
  • 5: salva solo la terza e la quarta cifra, il che è anche sbagliato, "10549" dovrebbe probabilmente essere "49" ma è invece "54".
  • come puoi prevedere, il problema continua con cifre più alte.

OK, quindi sta prendendo il valore dal menu a discesa, ABCD

Quindi prende la sottostringa dalla posizione 2, CD

E poi err, a sinistra lo riempie di 2 zeri, se necessario, CD

In alternativa, se hai appena terminato X, eseguirà la sottostringa in X e il pad in OX

Sta prendendo le ultime due cifre dell'anno, quindi passa a sinistra con uno "0".

Quindi il 2010 sarebbe il 10, il 2009 sarebbe il 09.

Non sono sicuro del motivo per cui lo sviluppatore non ha semplicemente impostato il valore nel menu a discesa sulle ultime due cifre o perché è necessario lasciarlo pad (a meno che non si tratti di anni 0-9 d.C.).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top