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

C#中数组转整数再转回数组丢失原始值问题排查

问题根源与解决方案

你的核心问题是存储数组时没有用分隔符区分元素,导致元素边界完全丢失,后续根本无法还原原始数组:

  1. 原始错误逻辑的问题点:

    • string.Concat(array)直接拼接元素得到"01315",转成int时开头的0会被整数自动忽略,变成1315,直接丢失了第一个元素0。
    • 把1315转回字符串后按字符拆分,自然会把原本的15拆成1和5——因为此时没有任何标记能区分15是单个元素还是两个独立的数字。
  2. 正确的实现方式:
    存储和还原时必须用分隔符(比如逗号)标记每个元素的边界,代码修改如下:

double[] array = { 0, 1, 3, 15 };

// 存储阶段:用分隔符拼接元素
var result = string.Join(",", array); // 得到 "0,1,3,15"

// 还原阶段:按分隔符拆分后逐个转int
int[] resultToArray = result.Split(',')
                            .Select(s => int.Parse(s))
                            .ToArray(); // 得到 {0,1,3,15}

如果硬要通过整数存储(不推荐,因为多位数元素会导致边界丢失,且数组过长会超出整数范围),可以给每个元素固定位数(比如每个元素占两位,不足补0),但这种方式局限性很大:

double[] array = { 0, 1, 3, 15 };

// 存储:每个元素补成两位字符串再拼接
var resultStr = string.Concat(array.Select(n => n.ToString("D2"))); // 得到 "00010315"
int resultNumber = int.Parse(resultStr); // 得到 10315

// 还原:按每两位拆分再转int
int[] resultToArray = Enumerable.Range(0, resultStr.Length / 2)
                                .Select(i => int.Parse(resultStr.Substring(i * 2, 2)))
                                .ToArray(); // 得到 {0,1,3,15}

但这种方式只能处理固定位数的元素,一旦元素位数超过预设值就会出错,所以优先推荐用分隔符拼接字符串的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 13:54:52