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

如何将C#中List<List<List<String>>>转换为List<List<List<int>>>?

解决C#中List<List<List>>到List<List<List>>的类型转换问题

你遇到的CS1503错误是因为方法make_me_a_travel_matrix要求的参数类型是三层整数列表,但你传入的是三层字符串列表,C#无法自动完成不同类型泛型列表的转换,必须手动逐元素转换。以下是几种可行的解决方案:

方案1:使用LINQ嵌套转换(简洁写法)

利用LINQ的Select方法逐层转换字符串到整数,代码简洁高效:

private int[] strategija1 (DataTable dtexcel)
{   
    List<List<List<string>>> dt_matrix = convert_list_3d_arrayList(dtexcel, dtexcel.Rows.Count, (dtexcel.Columns.Count) - 1); 

    // 转换字符串三层列表为整数三层列表
    var intMatrix = dt_matrix.Select(
        outer => outer.Select(
            middle => middle.Select(str => int.Parse(str)).ToList()
        ).ToList()
    ).ToList();

    make_me_a_travel_matrix(intMatrix);
    return null;
}

注意:该写法要求所有字符串都能成功解析为整数,若存在无效格式的字符串,会抛出FormatException。

方案2:带异常处理的安全转换

如果DataTable中可能存在非整数格式的内容,使用int.TryParse进行安全转换,避免程序崩溃:

private int[] strategija1 (DataTable dtexcel)
{   
    List<List<List<string>>> dt_matrix = convert_list_3d_arrayList(dtexcel, dtexcel.Rows.Count, (dtexcel.Columns.Count) - 1); 

    var intMatrix = dt_matrix.Select(outerList => 
        outerList.Select(middleList => 
            middleList.Select(str => 
            {
                if (int.TryParse(str, out int result))
                    return result;
                // 自定义转换失败的处理逻辑:比如返回默认值或抛出异常
                throw new InvalidOperationException($"无法将字符串 \"{str}\" 转换为整数");
                // 或者返回默认值:return 0;
            }).ToList()
        ).ToList()
    ).ToList();

    make_me_a_travel_matrix(intMatrix);
    return null;
}

方案3:手动多层循环转换(适合新手理解)

若不熟悉LINQ,可通过多层循环逐个转换元素:

private int[] strategija1 (DataTable dtexcel)
{   
    List<List<List<string>>> dt_matrix = convert_list_3d_arrayList(dtexcel, dtexcel.Rows.Count, (dtexcel.Columns.Count) - 1); 

    // 初始化目标整数三层列表
    List<List<List<int>>> intMatrix = new List<List<List<int>>>();
    foreach (var outerList in dt_matrix)
    {
        List<List<int>> middleLayer = new List<List<int>>();
        foreach (var innerList in outerList)
        {
            List<int> intList = new List<int>();
            foreach (var str in innerList)
            {
                // 同样可替换为int.TryParse实现安全转换
                intList.Add(int.Parse(str));
            }
            middleLayer.Add(intList);
        }
        intMatrix.Add(middleLayer);
    }

    make_me_a_travel_matrix(intMatrix);
    return null;
}

额外优化建议

从源头避免转换:修改convert_list_3d_arrayList方法,在读取DataTable数据时直接将值转换为整数,返回List<List<List<int>>>类型,这样就不需要后续的转换操作,减少代码复杂度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:58:57