如何将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
相关产品推荐
相关产品推荐

