You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何根据指定Type类型将字符串解析为对应类型的对象?

通用解析实现方案

不需要为每个值类型单独编写分支判断,C#内置的TypeConverter体系(位于System.ComponentModel命名空间)就是为这类跨类型通用转换场景设计的,原生支持所有基础值类型、可空值类型、枚举、常用框架内置类型,还支持自定义类型扩展,完全可以替换你当前的多分支硬编码逻辑。

直接用以下实现替换你的ParseValue方法即可:

using System.ComponentModel;
using System.Globalization;

private static object ParseValue(Type type, string argValue)
{
    // 空值处理
    if (string.IsNullOrEmpty(argValue))
    {
        // 引用类型、可空值类型直接返回null
        if (!type.IsValueType || Nullable.GetUnderlyingType(type) != null)
            return null;
        // 非可空值类型传入空参数时抛出格式错误,可根据业务需求调整默认值逻辑
        throw new FormatException($"类型 {type.Name} 为非可空值类型,不允许传入空参数");
    }

    // 获取目标类型的专用转换器
    TypeConverter converter = TypeDescriptor.GetConverter(type);
    // 使用不变文化做解析,避免不同区域的小数点、日期格式差异导致解析错误
    return converter.ConvertFrom(null, CultureInfo.InvariantCulture, argValue);
}

方案特性

  • 自动兼容可空类型:无需单独判断int?/long?/double?这类Nullable<T>类型,转换器会自动识别底层类型完成转换
  • 覆盖全量常用类型:除了你当前已经处理的整数、浮点数类型,还原生支持bool、decimal、DateTime、Guid、枚举等所有实现了类型转换器的系统类型,不需要额外写代码
  • 扩展性强:后续如果需要解析自定义复杂类型,只需要给对应类型添加[TypeConverter]特性实现自定义转换逻辑,上述通用解析代码不需要做任何修改
  • 完全兼容现有赋值逻辑:转换返回的结果就是目标类型的准确实例,可以直接传入property.SetValue(this, parsedValue)完成赋值,不会出现类型不匹配问题

额外说明

不推荐使用Convert.ChangeType实现该需求,这个API对可空值类型的支持很差,且不支持自定义扩展,遇到非系统内置类型就会直接抛出异常,适用场景非常有限。
如果需要处理非法输入的友好提示,可以在转换逻辑外层捕获FormatException、NotSupportedException两类异常,自定义参数错误的提示信息。

内容的提问来源于stack exchange,提问作者Craig Hawkins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 00:31:03