我希望能够创建一个通用的字符串转数字转换器,并将其提供为字符串扩展。因此,我编写了以下代码:
我称之为这样:
直到我想使用分组分隔符时,它才能正常工作: 由于我住在法国,千位分隔符是空格,小数分隔符是逗号,因此字符串“1 234 567,89”应等于1234567.89(在不变的文化中)。但是,该函数崩溃了!
当我尝试执行非泛型转换(如double.Parse(...))时,我可以使用一个接受NumberStyles参数的重载。我指定NumberStyles.Number,这次它起作用了!
所以问题是:
- 为什么解析不遵循我的NumberFormatInfo(其中NumberGroupSeparator已正确指定为空格,就像我在我的操作系统中指定的一样)? - 我如何使具有Convert.ChangeTime的通用版本工作,因为它没有接受NumberStyles参数的重载?
public static bool TryParse<T>( this string text, out T result, IFormatProvider formatProvider ) where T : struct
try
{
result = (T)Convert.ChangeType( text, typeof( T ), formatProvider );
return true;
}
catch(...
我称之为这样:
int value;
var ok = "123".TryParse(out value, NumberFormatInfo.CurrentInfo)
直到我想使用分组分隔符时,它才能正常工作: 由于我住在法国,千位分隔符是空格,小数分隔符是逗号,因此字符串“1 234 567,89”应等于1234567.89(在不变的文化中)。但是,该函数崩溃了!
当我尝试执行非泛型转换(如double.Parse(...))时,我可以使用一个接受NumberStyles参数的重载。我指定NumberStyles.Number,这次它起作用了!
所以问题是:
- 为什么解析不遵循我的NumberFormatInfo(其中NumberGroupSeparator已正确指定为空格,就像我在我的操作系统中指定的一样)? - 我如何使具有Convert.ChangeTime的通用版本工作,因为它没有接受NumberStyles参数的重载?