2014-03-14 66 views
10

我真的沒有爲什麼,我對這個越來越0價值理念:無法解析字符串爲整數值

enter image description here

但此代碼的工作很好:

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

這裏是appsetting:

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

任何想法?

EDIT1

我想要得到的"1546"整數值,但它無法工作。
這裏是獲取appsetting代碼:

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

我已經試過你的建議,這是結果:

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

的字符串值是正確的("1546") ,但它不能解析爲整數。這裏發生了什麼?

編輯2

我非常肯定的值:

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

真是數"1546"
的組合但當我嘗試重新編寫使用Immediate Window字符串值它現在可以被解析。但我還是不明白這個Bug的原因嗎?

enter image description here

編輯3

最後,現在的工作,感謝Johnny

我做什麼,我重新寫全,<add key="PesoPayMerchantId" value="1546"/>現在它可以被解析。感謝你的幫助。 :D

+1

你確定id從PesoPayMerchantId返回值是0嗎?你是從發佈版本運行的嗎?當事情經過優化時,調試位很容易失調。 – payo

+1

你應該總是檢查bool TryParse()結果。 –

+1

如果TryParse失敗,則id值將爲零,因此您應該在執行後檢查TryParse()是否爲true。 – George

回答

3

答案是,重新編寫的配置。我記得,我只是copied and paste"1546"從PDF文件。
因此,吸取教訓,不要懶得打字的價值觀。

附加信息:
我還記得,我沒有複製和pastegmail(google Chrome),我發現我複製的文本包含hidden characters開頭。

+2

我不認爲你太懶惰,寫一個很長的問題! :p –

+1

從PDF複製/粘貼可能會有問題。也許值得一提的是瀏覽器/操作系統 - 我在Linux下的evince文檔查看器中遇到了類似的問題。 –

+1

哈哈!現在我知道原因。由於您複製,引號與打字不同,並且在配置文件中不可接受。 – AnhTriet

1

我會檢查Try.Parse的返回值。

從技術文檔: 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

我同意這種方法,因爲布爾返回會讓你知道解析是否失敗,0可能只是默認值,因爲解析失敗,或者它實際上可能是被轉換爲0的「0」。 –

+1

@TGH結果是錯誤的,但爲什麼? – fiberOptics

1

這個測試斷言的總是正確:

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

所以沒有這部分代碼的問題。它可能會被代碼的某些調試/分析部分所改變。或者,也許有一些來自非管理調用的堆棧損壞。

2

我只能認爲你正在經歷某種奇怪的全球化/文化特定問題。

既然你知道電話號碼的確切格式,你可以嘗試Int32.TryParse Method (String, NumberStyles, IFormatProvider, Int32)overload,例如:

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