Невозможно разобрать строку на целое значение
У меня действительно нет идеи о том, почему я получаю значение 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);
}
}
}
Так что проблема не в этой части кода. Это может быть изменено некоторой частью отладки/профилирования вашего кода. Или, может быть, существует некоторая ошибка стека из неуправляемого вызова.