5

我的课有问题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上的错误报告

4

1 回答 1

6

使用以下参数DoubleConverterTypeDescriptor.GetConverter(typeof(double))end ups 调用中获得的 :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)));
于 2010-04-22T10:20:01.070 回答