Невозможно разобрать строку на целое значение

У меня действительно нет идеи о том, почему я получаю значение 0:

enter image description here

Но этот код работает хорошо:

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

Вот пример:

<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

Ответ будет, переписать конфигурацию.
Как я помню, я просто copied and paste "1546" из файла pdf.
Итак, извлеченные уроки, не слишком ленивы при наборе значений.

Дополнительная информация:
Я также помню, что я копировал и paste на gmail (google Chrome), и я узнал, что текст, который я скопировал, содержит hidden characters в начале.

Ответ 2

Я могу только думать, что вы испытываете какую-то странную проблему глобализации/культуры.

Учитывая, что вы знаете точный формат номера, вы можете попробовать перегрузку Int32.TryParse Method (String, NumberStyles, IFormatProvider, Int32) , например:

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

Ответ 3

Я бы проверил возвращаемое значение 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);
      }

Ответ 4

Этот тест всегда правильно:

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

Так что проблема не в этой части кода. Это может быть изменено некоторой частью отладки/профилирования вашего кода. Или, может быть, существует некоторая ошибка стека из неуправляемого вызова.