10
votes

Impossible d'analyser la chaîne en valeur entière

Je n'ai vraiment pas l'idée de savoir pourquoi je reçois 0 code> de la valeur:

 Entrez la description de l'image p>

mais ce code fonctionne bien: p> xxx pré>

voici l'appSetage: p>

<add key="PesoPayMerchantId" value="​1546"/>  


17 commentaires

Vous êtes sûr que l'identifiant est 0 à partir de la valeur de retour PESOPAYMERCHANTID? Exécutez-vous cela à partir d'une version de sortie? Les bits de débogage se désalignent facilement lorsque les choses sont optimisées.


Vous devriez toujours vérifier le résultat Bool Tryparse ().


Si la trypairse échoue, la valeur d'identification sera nulle, vous devriez donc vérifier si Tryparse () est vrai lors de l'exécution.


Avez-vous utilisé multithreading? Changer également Int.Tryparse avec double.Tryparse et montrer le résultat.


Vérifiez le résultat réel par console.writeline (par opposition à ce que l'IDE vous dit la valeur est pendant le débogage) - J'ai eu un problème bizarre ici à l'aide du R # Test Runner


L'erreur est si étrange. Veuillez essayer int32.parse () méthode. Est-ce que ça marche?


C'est intéressant, vous vérifiez avec une valeur codée dure au lieu de la valeur des appsettings et informez la réelle.


@ Forte_201092 Non, ça ne marche pas. Ça jette une exception. Je viens de renoncer à cela et d'utiliser la valeur de la chaîne à la place. Merci à tous.


@StuartLC J'ai utilisé débog.writeline (val) et it sortie 1546 , lequel je pense est une chaîne valide. Mais toujours l'analyser en intiquee échoue.


La seule façon de reproduire votre problème est d'affecter la valeur "L546" où le "L" est en réalité "L" en minuscule. Il a l'air assez comme "1" (un) mais ce n'est pas le cas. Essayez de rentrer de la valeur dans les applications.


@Johnny je suis très sûr que c'était 1 pas 'l' :)


@fiberoptics Avez-vous ré-entré la valeur?


@Johnny oui. S'il vous plaît voir mon édition.


Vérifiez s'il y a de l'espace ou d'autres caractères de la valeur de réglage de l'application et de la couper. Si vous êtes sûr qu'il n'y a pas, utilisez Int.tryparse ().


@fiberoptics Je pense qu'il pourrait y avoir quelque chose dans la chaîne, et c'est pourquoi vous devez re-taper la chaîne de valeur entière. Avec le faisceau I-Passing dans la chaîne (disons entre 15 et 46), alors si vous maintenez la touche ALT et appuyez sur 1, 2, 7, une prise de caractères Del Invisible est insérée et le même problème se produira. Dans ce cas, je ne l'appellerai pas un "bogue".


Vous devez faire boucler la chaîne et imprimer chaque code de caractère pour vous assurer qu'il existe seulement quatre caractères et qu'ils sont les codes que vous attendez pour ces chiffres.


@JOHNNY I RE-Ecrire le "1546", rien n'arrive, mais quand je réécrireai l'ensemble de l'ensemble Ça fonctionne maintenant. Merci beaucoup!


4 Réponses :


1
votes

J'inspecterais la valeur de retour de TRY.PARSE.

de la documentation: http://msdn.microsoft.com/fr- US / Bibliothèque / F02979C7 (V = VS.110) .aspx P>

      int number;
      bool result = Int32.TryParse(value, out number);
      if (result)
      {
         Console.WriteLine("Converted '{0}' to {1}.", value, number);         
      }
      else
      {
         if (value == null) value = ""; 
         Console.WriteLine("Attempted conversion of '{0}' failed.", value);
      }


2 commentaires

Je suis d'accord avec cette approche, car le retour booléen vous permettra de savoir si l'analyse a échoué ou non, le 0 pourrait être la valeur par défaut, car l'analyse échelle ou elle pourrait en réalité être convertie en 0.


@TGH Le résultat est faux, mais pourquoi?



1
votes

Ce test Assert est toujours correctement correctement:

namespace SOWTests
{
    using Microsoft.VisualStudio.TestTools.UnitTesting;

    [TestClass]
    public class PTests
    {
        [TestMethod]
        public void PTest()
        {
            string val = "1546";

            int id;
            int.TryParse(val, out id);

            Assert.AreEqual(1546, id);
        }
    }
}


0 commentaires

2
votes

Je ne peux que penser que vous rencontrez une sorte de problème spécifique de mondialisation / culture étrange.

Étant donné que vous connaissez le format exact du numéro, vous pouvez essayer la méthode int32.tryparse (chaîne, chiffres , IformatProvider, int32) surcharge < / a>, par exemple: xxx


0 commentaires

3
votes

La réponse serait, ré-écrire la configuration.
Comme je me souviens, je viens de copié et coller "1546" à partir d'un fichier PDF.
Alors, leçon apprise, ne soyez pas trop paresseux sur la tape des valeurs.

Informations supplémentaires:
Je me souviens aussi que j'ai copié et coller sur gmail (Google chrome) et j'ai découvert que le texte que j'ai copié contient caractères cachés au début.


2 commentaires

Copier / pâte de PDF peut être problématique. Peut-être vaut la peine de mentionner Viewer / OS - J'ai eu des problèmes similaires avec Evince Document Viewer sous Linux.


MDR! Maintenant, je connais la raison. Parce que vous copiez, la citation est différente de la dactylographie et elle n'est pas acceptable dans le fichier de configuration.