如何解决c# Foreach 在迭代 Db 表后返回相同的值
我有奇怪的问题。我试图用 5 行迭代 bd 表并返回此表值 + 图像作为字符串,当我检查 foreach 循环所有项目传递并添加到对象列表时,但是当返回所有值时,我发现列表中有 5 个相同的值物品 !!!都属于最后一行?
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; }
}
var Transfer = new transferToFront();
var mylist = new List<object>();
foreach (var obj in Foodobjt)
{
String filePath = HostingEnvironment.MapPath(@"~/Images/");
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);
解决方法
Transfer
在循环的迭代中共享,因此每次您将相同的对象附加到列表中。内存映射看起来像:
+--------------------------+
| Transfer |
+--+----+----+----+---+----+
| | | | |
+--+----+----+----+---+--+
| 0 1 2 3 4 |
| myList |
+------------------------+
因此,当您更改 Transfer
时,您会更改列表中的所有项目 - 因为它们是相同的。
解决方案是为每次迭代创建一个全新的实例:
var mylist = new List<object>();
foreach (var obj in FoodObjt)
{
var Transfer = new transferToFront();
String filePath = HostingEnvironment.MapPath(@"~/Images/");
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);
现在内存映射看起来像:
+----------+ +----------+ +----------+ +----------+ +----------+
|Transfer 1| |Transfer 2| |Transfer 3| |Transfer 4| |Transfer 5|
+--+-------+ +-----+----+ +---+------+ +----+-----+ +---+------+
| | | | |
| +----------+ | | |
| | +----------------+ | |
| | | +-------------------------+ |
| | | | +---------------------------------+
| | | | |
+--+----+----+----+---+--+
| 0 1 2 3 4 |
| myList |
+------------------------+
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。