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

C#中List.Add()仅添加最后一行数组的问题求助

问题原因

你在循环外仅创建了一个float[]数组实例,而数组属于引用类型——每次循环只是修改这个数组内部的元素值,然后将同一个数组的引用添加到List中。List中所有元素本质上都指向内存中同一个数组对象,因此最终所有元素都会显示最后一次修改后的数组内容。

解决方法

有两种常用的修复方式:

方式一:循环内创建新数组实例

将数组的创建逻辑移到while循环内部,每次循环都生成一个全新的float[]数组,确保添加到List的是不同的数组引用:

string filename = @"D:\TestFiles\floats.bin";

List<float[]> field_array = new List<float[]>();
string[] field_array_row;

Console.WriteLine("Individual parsed rows:");
using (StreamReader parser = new StreamReader(filename))
{
    string line;
    while((line = parser.ReadLine()) != null)
    {
        // 每次循环新建数组实例
        float[] field_float_num = new float[3];
        field_array_row = line.Split(',');
        for(int i = 0; i < 3; i++)
        {
            // 加Trim()处理数据中的空格,避免解析失败
            field_float_num[i] = float.Parse(field_array_row[i].Trim());
        }
        Console.WriteLine(string.Join(",",field_float_num));
        field_array.Add(field_float_num);
    }
}

Console.WriteLine("\nfield_array Output:");

foreach (float[] x in field_array)
{
    Console.WriteLine(string.Join(",", x));
}

方式二:添加数组的副本到List

如果需要保留循环外的数组声明,可以在添加时创建当前数组的副本,避免添加原数组的引用:

// 其他代码不变,仅修改Add这一行
field_array.Add((float[])field_float_num.Clone());

另外补充:原代码中CSV数据的逗号后带有空格,直接float.Parse可能会触发格式错误,建议添加Trim()去除字符串两端的空白字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:02:08