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

C#中如何将int、decimal解析方法合并为通用泛型方法

泛型数值解析方法合并实现

你可以直接通过泛型约束合并两个重复的解析逻辑,不需要修改原有调用的异常处理规则,以下是两种适配不同.NET版本的实现:


.NET 7+ 最优实现

.NET 7 开始所有基础数值类型都实现了内置的ISpanParsable<T>泛型接口,直接用接口约束写泛型方法即可,没有额外性能开销,还能自动支持long、float、double等所有标准数值类型:

using System.Numerics;

private T ParseNumericField<T>(string value, int linecount, string fieldName) 
    where T : ISpanParsable<T>
{
    if (!T.TryParse(value, provider: null, out T result))
    {
        throw new Exception($"TryParse failed, line {linecount} Fieldname: {fieldName} Value: {value}");
    }
    return result;
}

调用方式和原有方法完全兼容,直接指定泛型类型即可替换原有调用:

// 替换原ParseIntField调用
int intValue = ParseNumericField<int>(rawValue, currentLine, "UserId");
// 替换原ParseDecimalField调用
decimal decimalValue = ParseNumericField<decimal>(rawValue, currentLine, "OrderAmount");

.NET 6及以下低版本兼容实现

如果你的项目用的是低于.NET7的版本,没有ISpanParsable接口,可以通过类型分支判断实现,逻辑和你原来的独立方法完全一致:

private T ParseNumericField<T>(string value, int linecount, string fieldName)
{
    bool parseSuccess = false;
    object parseResult = default(T);

    switch (Type.GetTypeCode(typeof(T)))
    {
        case TypeCode.Int32:
            parseSuccess = int.TryParse(value, out int intRes);
            parseResult = intRes;
            break;
        case TypeCode.Decimal:
            parseSuccess = decimal.TryParse(value, out decimal decRes);
            parseResult = decRes;
            break;
        // 如需支持其他数值类型,在这里加对应分支即可
        default:
            throw new NotSupportedException($"当前方法不支持解析{typeof(T).Name}类型");
    }

    if (!parseSuccess)
    {
        throw new Exception($"TryParse failed, line {linecount} Fieldname: {fieldName} Value: {value}");
    }

    return (T)parseResult;
}

说明

  • 两种实现的错误抛出逻辑和你原有独立方法完全一致,上层异常捕获代码不需要做任何修改
  • 如果需要适配特定区域的数字格式(比如带千分位、货币符号的数值),只需要给TryParse方法传入对应的IFormatProvider参数即可
  • 高版本实现没有装箱拆箱开销,性能和你手写的两个独立方法基本无差异

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 23:21:40