我的TypeConverter
课程有问题。它适用于CultureInvariant
值,但无法转换特定文化,如英语千位分隔符。下面是一个我无法开展工作的小型测试程序。
这是问题:) - ConvertFromString
使用以下消息抛出异常“2,999.95不是Double的有效值。”并且内部异常“输入字符串格式不正确。“。
using System;
using System.Globalization;
using System.ComponentModel;
class Program
{
static void Main()
{
try
{
var culture = new CultureInfo("en");
var typeConverter = TypeDescriptor.GetConverter(typeof(double));
double value = (double)typeConverter.ConvertFromString(
null,
culture,
"2,999.95");
Console.WriteLine("Value: " + value);
}
catch (Exception e)
{
Console.WriteLine("Error: " + e.Message);
}
}
}
编辑: 链接到Connect
上的错误报告答案 0 :(得分:5)
从DoubleConverter
获得的TypeDescriptor.GetConverter(typeof(double))
使用以下参数调用Double.Parse
:
Double.Parse(
"2,999.95",
NumberStyles.Float,
(IFormatProvider)culture.GetFormat(typeof(NumberFormatInfo)));
问题是NumberStyles.Float
不允许有数千个分隔符,这就是你遇到问题的原因。您可以在Microsoft Connect上提交此内容,或查看是否有其他人遇到同样的问题。
如果同时使用Double.Parse
调用NumberStyles.AllowThousands
,则不会出现问题。
Double.Parse(
"2,999.95",
NumberStyles.Float | NumberStyles.AllowThousands,
(IFormatProvider)culture.GetFormat(typeof(NumberFormatInfo)));