我真的不知道为什么我会得到0
的价值:
但是这段代码效果很好:
int val = Convert.ToInt32("1546");
这是appsetting:
<add key="PesoPayMerchantId" value="1546"/>
有什么想法吗?
Edit1
我想得到"1546"
的整数值,但它无法正常工作
以下是获取appsetting的代码:
public static string GetConfigurationString(string appSettingValue)
{
return ConfigurationManager.AppSettings[appSettingValue];
}
我已经尝试了你的建议,结果就是这样:
字符串值是正确的("1546")
,但不能解析为整数。这里发生了什么?
修改2
我非常确定:
的价值<add key="PesoPayMerchantId" value="1546"/>
实际上是数字"1546"
的组合
但是当我尝试使用Immediate Window
重新编写字符串值时,现在可以解析它。但我仍然无法找出这个Bug
的原因?
编辑3
最后,由于Johnny
,它现在有效我所做的是,我重写了整个<add key="PesoPayMerchantId" value="1546"/>
,现在可以解析它了。感谢你的帮助。 :d
答案 0 :(得分:3)
答案是,重新编写配置
我记得,我只是来自pdf文件的copied and paste
"1546"
所以吸取教训,不要太懒于输入值。
附加信息:
我还记得,我在paste
gmail
上复制并(google Chrome)
,我发现我复制的文字在开头包含hidden characters
。
答案 1 :(得分:2)
我只能认为你正在经历某种奇怪的全球化/文化特定问题。
鉴于您知道号码的确切格式,您可以尝试Int32.TryParse Method (String, NumberStyles, IFormatProvider, Int32)
overload,例如:
int.TryParse(val, NumberStyles.Any, CultureInfo.InvariantCulture, out id);
答案 2 :(得分: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);
}
答案 3 :(得分: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);
}
}
}
所以问题不在这部分代码中。它可能会被代码的一些调试/分析部分改变。或者可能是非托管呼叫导致堆栈损坏。