Question

Dans ce code, je suis en train de déboguer, j'ai ce code:

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

Qu'est-ce que cela retourne? Je ne peux vraiment pas trop en parler car cela fait partie d'une demande de carte de crédit en direct. Comme vous pouvez l'imaginer, la liste DropDownList contient l'année à 4 chiffres.

MISE À JOUR: Merci à tous. Je ne fais pas beaucoup de développement .NET alors la mise en place d’un test rapide n’est pas aussi rapide pour moi.

Était-ce utile?

La solution

Il prend les deux derniers chiffres de l’année et insère un maximum de 2 caractères dans le côté gauche. Ressemble à un " juste au cas où " pour les années d'expiration se terminant par 08, 07, etc., en veillant à ce que le zéro soit en tête.

Autres conseils

Ceci imprime "98". à la console.

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

Bien sûr, vous pouvez exécuter ceci. Vous ne pouvez simplement pas l'exécuter dans l'application en cours de débogage. Pour savoir ce qu’il fait, et pas seulement à quoi il ressemble, créez une nouvelle application Web, insérez une liste DropDownList, mettez quelques années statiques, puis insérez le code que vous avez mentionné et voyez ce qu’il en est. Est-ce que. Ensuite, vous saurez avec certitude.

quelque chose de stupide. Il obtient la valeur de l'élément sélectionné et prend tout après les deux premiers caractères. S'il ne s'agit que d'un caractère, il ajoute un "0" au début de celui-ci et, s'il s'agit de zéro caractère, il renvoie "00". La raison pour laquelle je dis que c'est stupide, c'est parce que si vous avez besoin que la valeur ait deux caractères, pourquoi ne pas simplement la définir comme ça pour commencer lorsque vous créez la liste déroulante?

On dirait qu’il faut saisir la sous-chaîne du 3ème caractère (si 0) à la fin, puis si la sous-chaîne a une longueur inférieure à 2, la longueur est égale à 2 en ajoutant 0 au côté gauche.

PadLeft garantit que vous recevez au moins deux caractères de l'entrée, en complétant l'entrée (sur le côté gauche) avec le caractère approprié. Dans ce cas, l'entrée peut donc être de 12. Vous obtenez "12". retour. Vous pouvez également entrer 9, auquel cas vous obtenez "09". retour.

Ceci est un exemple d'enchaînement complexe (voir après avoir mal tourné et rendre le code trop complexe?

La sous-chaîne renvoie la valeur avec les deux premiers caractères ignorés, le padleft complète le résultat avec des zéros au début:

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

Je suppose que le code tente de convertir l'année en une valeur à 2 chiffres.

PadLeft ne fait quelque chose que si l'utilisateur entre une année comportant 2 ou 3 chiffres.

Avec une année à un chiffre, vous obtenez une exception (erreur de souscription).

Avec une année à deux chiffres (07, 08, etc.), il retournera 00. Je dirais que c'est une erreur.

Avec une année à trois chiffres (207, 208) que l'auteur aurait pu supposer être des fautes de frappe, le dernier chiffre est rempli avec un zéro - 207 - > 07; 208 - > 08.

Tant que l'utilisateur doit choisir une année et qu'il n'est pas autorisé à entrer une année, PadLeft est inutile: la sous-chaîne (2) fait exactement ce dont vous avez besoin pour une année à 4 chiffres.

Ce code semble essayer de saisir une année à deux chiffres sur une année à quatre chiffres (la valeur est ddlexpyear)

Il faut des chaînes et renvoie des chaînes, je vais donc éviter les délimiteurs de chaîne:

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

Le problème est que cela ne fait pas un bon travail. Dans ces cas, le rembourrage n'aide pas réellement. Le retrait du code du pad n’affecte pas les cas où il est correct.

Le code fonctionne donc (avec ou sans le pavé numérique) pendant 4 années numériques, que fait-il pour les chaînes de longueurs différentes?

  • null: exception
  • 0: exception
  • 1: exception
  • 2: renvoie toujours "00". par exemple. l'année 49 (quand les Juifs ont été expulsés de Rome) devient "00". C'est mauvais.
  • 3: enregistre le dernier chiffre et met un "0" devant elle. Correct dans 10% des cas (lorsque le deuxième chiffre est en fait un zéro, comme 304 ou 908), mais tout à fait erroné dans le reste (comme 915, 423 et 110)
  • 5: enregistre simplement les 3ème et 4ème chiffres, ce qui est également faux, "10549" devrait probablement être " 49 " mais est à la place "54".
  • comme vous pouvez vous attendre, le problème persiste avec des chiffres plus élevés.

OK, il prend donc la valeur du menu déroulant, ABCD

Ensuite, il prend la sous-chaîne de la position 2, CD

Et puis il se trompe, il le remplit avec 2 zéros s'il le faut aussi, CD

Ou, si vous venez de terminer X, alors il se ficherait de sous-chaîne vers X et de pad vers OX

Il prend les deux derniers chiffres de l’année, puis touchez à gauche avec un "0".

Donc 2010 serait 10, 2009 serait 09.

Vous ne savez pas pourquoi le développeur n'a pas simplement défini la valeur du menu déroulant sur les deux derniers chiffres, ni pourquoi vous devez le laisser (sauf si vous avez affaire à des années 0 à 9 après JC).

scroll top