【发布时间】:2010-03-08 11:04:24
【问题描述】:
我想制作一个通用字符串到数字的转换器,并将其作为字符串扩展名提供,所以我编写了以下代码:
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 参数的重载?
【问题讨论】: