将字符串变量转换为实际类型的编码实践

本文关键字:类型 编码 变量 转换 字符串 | 更新日期: 2023-09-27 17:58:45

我有一个验证用户输入的服务。因此,在其他层中,我只是使用下面的语句来获得金额值,假设它已经被验证。

但是在编写单元测试用例时,我意识到这是失败的。所以,我的问题是,每当字符串值需要转换为实际类型时,我们是否需要始终尝试解析这些值。

var amountValue = Convert.ToDecimal(string.Format("{0}.{1}", view.amount, view.fraction))

将字符串变量转换为实际类型的编码实践

您应该解析字符串,因为这正是您真正想要做的。

类型转换与解析不同。

想象一下,在美国,用点.分隔小数,在欧盟,用逗号,分隔小数。你真的不知道语言环境是如何区分小数之类的(尤其是日期是至关重要的,应该是PARSED而不是CONVERTED)。

也就是说,规则用户输入=>解析是非常直接的。

这里有一个基于泛型的转换方法:

public static void Convert<T>(string text, out T value, CultureInfo culture) where T : IConvertible
{
    if (typeof(T).IsEnum)
    {
        value = (T) Enum.Parse(typeof (T), text, true);
    }
    else
    {
        value = (T)System.Convert.ChangeType(text, typeof(T), culture);
    }
}