如何在C#中将List<List<List<double>>>转换为指定格式字符串?
解决C#三层双精度列表转指定格式字符串的问题
你的问题出在直接拼接List<double>对象时,默认调用的是它的ToString()方法,返回的是类型名称而非元素内容,所以才会出现"System.Collections.."这类文本。以下是实现目标格式的代码:
核心实现代码
// 先扁平化三层列表,提取所有的二维点集合 var allPoints = doubles.SelectMany(level2 => level2); // 将每个二维点转换为 "[数值1, 数值2]" 格式的字符串 var formattedPoints = allPoints.Select(point => $"[{string.Join(", ", point)}]"); // 拼接成最终的带缩进和换行的格式 string result = $"[\n {string.Join(", \n ", formattedPoints)}\n]";
空值安全版本(避免空引用异常)
如果你的列表可能存在null元素,建议加上空值检查:
string result = "[]"; if (doubles != null) { // 过滤掉null的二级列表 var validPoints = doubles.SelectMany(level2 => level2 ?? Enumerable.Empty<List<double>>()) // 过滤掉null的点列表 .Where(point => point != null); var formattedPoints = validPoints.Select(point => $"[{string.Join(", ", point)}]"); result = $"[\n {string.Join(", \n ", formattedPoints)}\n]"; }
代码说明
- 扁平化列表:用
SelectMany(level2 => level2)把三层的List<List<List<double>>>转换成所有List<double>的集合(也就是你要的每个二维点)。 - 格式化单个点:对每个
List<double>,用string.Join(", ", point)把元素拼接成"x, y",再包裹方括号变成"[x, y]"。 - 拼接最终格式:用
\n作为分隔符,让每个点字符串单独占一行并缩进4个空格,最后在外层包裹大括号和首尾换行,匹配你要的目标格式。
内容的提问来源于stack exchange,提问作者Robert Smith
相关产品推荐
相关产品推荐

