2014-03-14 16 views
10

ich, warum ich 0 Wert auf das nicht auf die Idee, wirklich bin immer:kann nicht Zeichenfolge analysieren, um Integer-Wert

enter image description here

Aber dieser Code funktioniert gut:

int val = Convert.ToInt32("1546");  

Hier ist das Appsetting:

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

Irgendeine Idee?

Edit1

Ich möchte den ganzzahligen Wert von "1546" zu bekommen, aber es funktioniert nicht.
Hier ist der Code für Appsetting bekommen:

public static string GetConfigurationString(string appSettingValue) 
    { 
     return ConfigurationManager.AppSettings[appSettingValue]; 
    } 

Ich habe Ihre Vorschläge versucht, und das ist das Ergebnis:

enter image description here
enter image description here
enter image description here

Der String-Wert ist richtig ("1546") , aber es kann nicht in ganze Zahlen zerlegt werden. Was passiert hier?

Edit 2

Ich bin sehr sicher, dass der Wert von:

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

ist wirklich eine Kombination aus Zahlen "1546"
Aber wenn ich versuche, den String-Wert neu zu schreiben Immediate Window mit es kann jetzt geparst werden. Aber ich kann den Grund dieser Bug noch nicht herausfinden?

enter image description here

bearbeiten 3

Schließlich arbeitet sie jetzt dank Johnny

Was heißt, ich habe ich das ganze wieder schreiben, <add key="PesoPayMerchantId" value="1546"/> und es kann nun analysiert werden. Danke für deine Hilfe. : D

+1

Sie sind sicher, dass ID ist 0 von der PesoPayMerchantId Rückgabewert? Führst du das von einem Release-Build aus? Die Debug-Bits können leicht verschoben werden, wenn die Dinge optimiert sind. – payo

+1

Sie sollten immer bool TryParse() Ergebnis überprüfen. –

+1

Wenn TryParse fehlschlägt, ist der ID-Wert Null. Daher sollten Sie überprüfen, ob TryParse() bei der Ausführung wahr ist. – George

Antwort

3

Die Antwort wäre, die Config neu schreiben.
Wie ich mich erinnere, ich nur copied and paste"1546" aus einer PDF-Datei.
So Lektion gelernt, seien Sie nicht zu faul beim Eingeben von Werten.

Weitere Informationen:
ich, dass auch nicht vergessen, habe ich kopieren und paste auf gmail(google Chrome) und ich fand heraus, dass der Text, den ich hidden characters am Anfang kopiert enthält.

+2

Ich glaube nicht, dass Sie zu faul sind, es ist eine lange Frage zu schreiben !!! : p –

+1

Kopieren/Einfügen von PDF kann problematisch sein. Vielleicht erwähnenswert viewer/OS - ich hatte ähnliche Probleme mit evince Document Viewer unter Linux. –

+1

LOL! Jetzt kenne ich den Grund.Da Sie kopieren, unterscheidet sich das Anführungszeichen von der Eingabe und es ist in der Konfigurationsdatei nicht akzeptabel. – AnhTriet

1

Ich würde den Rückgabewert von Try.Parse überprüfen.

Aus Dokumentation: http://msdn.microsoft.com/en-us/library/f02979c7(v=vs.110).aspx

 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

Ich stimme diesem Ansatz eher zu, da die boolesche Rückmeldung Sie darüber informiert, ob das Parsen fehlgeschlagen ist oder nicht, die 0 könnte einfach der Standardwert sein, weil das Parsen fehlgeschlagen ist oder tatsächlich 0 ist. –

+1

@TGH das Ergebnis ist falsch, aber warum? – fiberOptics

1

Dieser Test Assert ist immer richtig:

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); 
     } 
    } 
} 

So Problem nicht in diesem Teil des Codes. Es wird möglicherweise durch das Debuggen/Profilieren eines Teils Ihres Codes geändert. Oder vielleicht eine Stapelbeschädigung durch nicht verwalteten Anruf.

2

Ich kann nur denken, dass Sie eine Art von seltsamen Globalisierung/Kultur spezifische Problem erleben.

Vorausgesetzt, dass Sie das genaue Format der Nummer kennen, können Sie versuchen, die Int32.TryParse Method (String, NumberStyles, IFormatProvider, Int32)overload, z.B .:

int.TryParse(val, NumberStyles.Any, CultureInfo.InvariantCulture, out id);