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

如何创建返回泛型数据的IReadOnlyCollection<T>方法 支持int、long类型入参

泛型改造实现

我们可以通过添加泛型参数+通用类型转换的方式,实现同时支持int和long类型的需求,改造后的代码如下:

public static IReadOnlyCollection<T> FillData<T>(this string[] ids, IReadOnlyCollection<T> list)
{
    var dataList = list?.ToList() ?? new List<T>();
    Type convertedType = typeof(T);
    foreach (var id in ids)
    {
        // 通用类型转换逻辑,自动适配int/long类型
        var value = (T)Convert.ChangeType(id, convertedType);
        dataList.Add(value);
    }
    return dataList.AsReadOnly();
}

可选限制:仅允许int/long类型

如果需要严格限制泛型只能传入int和long,避免其他不支持类型调用抛出异常,可以在方法开头增加类型校验逻辑:

public static IReadOnlyCollection<T> FillData<T>(this string[] ids, IReadOnlyCollection<T> list)
{
    Type convertedType = typeof(T);
    // 严格限制仅支持int和long两种类型
    if (convertedType != typeof(int) && convertedType != typeof(long))
    {
        throw new NotSupportedException("当前方法仅支持int和long两种数值类型");
    }

    var dataList = list?.ToList() ?? new List<T>();
    foreach (var id in ids)
    {
        var value = (T)Convert.ChangeType(id, convertedType);
        dataList.Add(value);
    }
    return dataList.AsReadOnly();
}

使用示例

调用时只需要指定对应的泛型参数即可自动匹配返回类型:

  • 生成int类型集合
string[] idArr = new string[] {"1", "2", "3"};
// 无已有集合的调用方式
IReadOnlyCollection<int> intList = idArr.FillData<int>(null);
// 传入已有int集合合并
var existedIntList = new List<int>{4,5}.AsReadOnly();
IReadOnlyCollection<int> mergedIntList = idArr.FillData(existedIntList);
  • 生成long类型集合
string[] idArr = new string[] {"100000000000", "200000000000"};
// 无已有集合的调用方式
IReadOnlyCollection<long> longList = idArr.FillData<long>(null);
// 传入已有long集合合并
var existedLongList = new List<long>{300000000000}.AsReadOnly();
IReadOnlyCollection<long> mergedLongList = idArr.FillData(existedLongList);

补充说明

原始代码存在两处拼写错误已在改造时修复:

  • 接口名IReadonlyCollection修正为标准写法IReadOnlyCollection
  • 返回值变量datalist修正为定义的dataList

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:24:00