【发布时间】:2016-01-08 07:39:25
【问题描述】:
我的 C# 程序中有一个字符串编号,它是“6.967.015”。那是德国数字格式,其中“。”分隔 1000 组,“,”是小数分隔符。
我创建了一个使用 Double.TryParse 将文本转换为双精度值的函数。它工作正常:
if (Double.TryParse(text, out result))
{
return result;
}
else
{
return defaultValue;
}
现在我需要第二种可转换的类型,而不是复制函数,我想创建一个接受该类型的函数(不要介意 Type 参数而不是泛型 <T> 函数,这是出于完整性原因) .
public static object DefaultIfNotValid(this object value, Type type, object defaultValue)
{
var converter = TypeDescriptor.GetConverter(type);
object convertedValue;
if (converter != null)
{
try
{
convertedValue = converter.ConvertFrom(value);
return convertedValue;
}
catch (Exception)
{
return defaultValue;
}
}
return defaultValue;
}
此代码的问题在于它适用于“123”,但不适用于上述数字“6.967.015”。 Convert 函数抛出“6.967.015 不是 double 的有效值”。我尝试给函数一个文化参数,看看这是否是问题所在,但这也不起作用(我为 TypeDescriptorContext 传递了 null)。
converter.ConvertFrom(null, new CultureInfo("de-de"), value);
这仍然引发了同样的异常。我还尝试了使用明确设置组和小数分隔符的自定义文化,但仍然是同样的问题。
也许它甚至不是文化,而是转换器不喜欢价值的其他东西。
有谁知道这可能是什么原因?即使字符串通过显式 double.TryParse 调用转换得很好。
【问题讨论】:
标签: c# .net double typeconverter