C# c Foreach在迭代Db表后返回相同的值
我有个奇怪的问题。我试图用5行迭代bd表,并返回这个表值+一个图像作为字符串,当我检查foreach循环所有传递的项并添加到对象列表时,但当返回所有值时,我在列表项中发现了5个相同的值!!!都属于最后一行吗C# c Foreach在迭代Db表后返回相同的值,c#,foreach,C#,Foreach,我有个奇怪的问题。我试图用5行迭代bd表,并返回这个表值+一个图像作为字符串,当我检查foreach循环所有传递的项并添加到对象列表时,但当返回所有值时,我在列表项中发现了5个相同的值!!!都属于最后一行吗 public class TransferItem { public string foodType { set; get; } public string foodName { set; get; } public int fo
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 |
+--+----+----+----+---+----+
| | | | |
+--+----+----+----+---+--+
| 0 1 2 3 4 |
| myList |
+------------------------+
+----------+ +----------+ +----------+ +----------+ +----------+
|Transfer 1| |Transfer 2| |Transfer 3| |Transfer 4| |Transfer 5|
+--+-------+ +-----+----+ +---+------+ +----+-----+ +---+------+
| | | | |
| +----------+ | | |
| | +----------------+ | |
| | | +-------------------------+ |
| | | | +---------------------------------+
| | | | |
+--+----+----+----+---+--+
| 0 1 2 3 4 |
| myList |
+------------------------+
因此,当您更改传输时,您将更改列表中的所有项目,因为它们是相同的
解决方案是为每个迭代创建一个新实例:
var mylist=新列表;
FoodObjt中的foreach var obj
{
var转移=新的转移前端;
字符串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.ReadAllBytesfilePath+obj.foodImage;
Transfer.Image=imageString;
mylist.AddTransfer;
}
返回Okmylist;
现在,内存映射如下所示:
+--------------------------+
| Transfer |
+--+----+----+----+---+----+
| | | | |
+--+----+----+----+---+--+
| 0 1 2 3 4 |
| myList |
+------------------------+
+----------+ +----------+ +----------+ +----------+ +----------+
|Transfer 1| |Transfer 2| |Transfer 3| |Transfer 4| |Transfer 5|
+--+-------+ +-----+----+ +---+------+ +----+-----+ +---+------+
| | | | |
| +----------+ | | |
| | +----------------+ | |
| | | +-------------------------+ |
| | | | +---------------------------------+
| | | | |
+--+----+----+----+---+--+
| 0 1 2 3 4 |
| myList |
+------------------------+
FoodObjt declared在哪里您在bat右侧有一个主要问题,您的transferToFront类在循环外创建了一次,并在没有创建新实例的情况下多次添加。在该集合中,您将多次使用FoodObjt集合最后一项的值拥有相同的对象。