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

C#遍历数据库表后返回列表元素全部为最后一行数据的异常问题

哥们,你这遇到的是C#里引用类型的经典坑啊!

问题根源

你在foreach循环外面只创建了一个transferToFront对象,每次循环只是修改这个对象的属性值,然后把同一个对象的引用塞进列表里。列表里存的全是指向同一个对象的指针,等循环结束,这个对象的属性已经被最后一行数据覆盖了,所以返回的列表自然全是最后一行的内容。

修复代码

把transferToFront的实例化移到循环内部就行,每次循环都创建一个新对象,每个对象对应数据库的一行数据:

public class TransferItem 
{
    public string foodType { set; get; }
    public string foodName { set; get; }
    public int foodPrice { set; get; }
    public string foodDescription { set; get; }
    public byte[] foodImage { set; get; }
}

// 建议用强类型列表,别用object,类型更安全
var mylist = new List<transferToFront>();
// 路径计算移到外面,避免重复执行
String filePath = HostingEnvironment.MapPath(@"~/Images/");

foreach (var obj in FoodObjt)
{
    // 每次循环新建一个对象!
    var Transfer = new transferToFront();
    
    Transfer.Id = obj.Id;
    Transfer.foodName = obj.foodName;
    Transfer.foodImage = obj.foodImage;
    Transfer.foodPrice = obj.foodPrice;
    Transfer.foodType = obj.foodType;
    Transfer.foodDescription = obj.foodDescription;
    
    var imageString = System.IO.File.ReadAllBytes(filePath + obj.foodImage);
    Transfer.Image = imageString;
    
    mylist.Add(Transfer);
}
return Ok(mylist);

额外小提示

  • 把List<object>换成List<transferToFront>,编译时就能检查类型错误,后续使用也不用强制转换,代码更靠谱。
  • 把filePath的计算放到循环外面,不然每次循环都要跑一遍路径映射,有点浪费性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 04:27:45